O comando de localização do Linux não parece funcionar

2

Alguém por favor pode me ajudar a entender porque meu comando find não reporta o resultado da lib64 como acontece com o comando ls (note que esses comandos são chamados no makefile no Debian)

LIBXML2  = $(shell find /usr/lib* -name libxml2.so.2.*)
LIBXML2_LS = $(shell ls -1 /usr/lib*/libxml2.so.2.*)

Abaixo está a saída

@echo LIBXML2: "$(LIBXML2)"

LIBXML2: /usr/lib/libxml2.so.2.7.8 /usr/lib32/libxml2.so.2.7.8

@echo LIBXML2_LS: "$(LIBXML2_LS)"

LIBXML2_LS: /usr/lib32/libxml2.so.2.7.8 /usr/lib64/libxml2.so.2.7.8 /usr/lib/libxml2.so.2.7.8
    
por Newbie 11.08.2016 / 18:00

1 resposta

0

Conforme identificado por Stephen Harris , /usr/lib64 é provavelmente um link simbólico no seu sistema. Quando você chama find /usr/lib64 , find atravessa /usr/lib64 , vê que não é um diretório (é um link simbólico) e, portanto, não recorre mais.

Para fazer com que find procure em /usr/lib64 se for um link simbólico para um diretório, adicione uma barra - colocar uma barra no final do nome de um link simbólico em um diretório faz com que ele seja interpretado como o destino diretório em vez do link.

Coloque também o padrão para -name entre aspas, caso contrário, ele será expandido se houver um arquivo correspondente no diretório atual.

LIBXML2  = $(shell find /usr/lib*/ -name 'libxml2.so.2.*')

No entanto, tenha em atenção que esta é uma má ideia. Percorrer todo o /usr/lib é muito lento e pode encontrar cópias particulares de bibliotecas que você não deseja vincular, ou arquivos não relacionados com um nome parecido (por exemplo, algum arquivo de documentação libxml.so.2.txt ).

Raramente há uma razão para procurar uma biblioteca dessa maneira. Se a biblioteca estiver no local padrão do sistema, que é onde você está procurando, o vinculador a encontrará sem que você forneça um caminho explícito, apenas com -lxml2 . Se a biblioteca estiver em um local diferente, normalmente é o trabalho de um script configure para procurá-lo. No caso da libxml, a maneira correta de localizar as partes é com o pkg-config :

CFLAGS += $$(pkg-config --cflags libxml-2.0)
LDFLAGS += $$(pkg-config --libs libxml-2.0)
    
por 15.08.2016 / 23:10

Tags