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)