ldconfig problema com o diretório lib padrão no CentOS

5

Estou trabalhando com uma máquina virtual (CentOS 5.3) que tem muito pouco espaço de armazenamento na unidade principal (que inclui /usr , /usr/local , etc). A maior parte do espaço de armazenamento está disponível em uma unidade separada montada em /mnt . Conseqüentemente, nesta unidade, criei um diretório de instalação básico (com subdiretórios como bin , include , lib , etc) e instalei uma biblioteca lá.

[standage@vm142-46 ~]$ ls -lhp /mnt/lib
total 33M
-rw-r--r-- 1 standage iplant-everyone 21M Dec 21 16:29 libgenometools.a
-rwxr-xr-x 1 standage iplant-everyone 13M Dec 21 16:29 libgenometools.so

Eu então tentei vincular a essa biblioteca com o código que eu havia escrito, mas ela me deu a seguinte mensagem.

/usr/bin/ld: cannot find -lgenometools

Percebi que não atualizei ldconfig com o novo diretório de instalação que eu havia criado, então fui em frente e adicionei /mnt/lib a /etc/ld.so.conf e executei /sbin/ldconfig . No entanto, quando tentei vincular meu código novamente, recebi o mesmo erro.

Eu consegui finalmente vincular as bibliotecas criando links simbólicos para /usr/local/lib64 ...

[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.a /usr/local/lib64
[standage@vm142-46 ~]$ sudo ln -s /mnt/lib/libgenometools.so /usr/local/lib64

... mas isso não resolve o meu problema original, é apenas uma solução de fita adesiva. O que eu fiz de errado originalmente e como posso criar um link para a biblioteca que eu instalei?

    
por Daniel Standage 22.12.2011 / 00:36

2 respostas

3

/etc/ld.so.conf influencia apenas o vinculador dinâmico, ou seja, onde as bibliotecas são procuradas em tempo de execução. Quando você constrói um executável, o que importa são os caminhos em que ld procura a biblioteca. A maneira usual de especificar isso é passar a opção -L ; a maioria dos scripts configure tem uma maneira de passar opções -L adicionais. Geralmente, não há como alterar o caminho de pesquisa padrão para ld . Você pode procurar alterar o arquivo de especificação do gcc, mas isso envolverá a alteração de um arquivo em /usr , não sob /etc .

Devido a sua configuração um pouco difícil, convém examinar uma consolidação do sindicato de /mnt above /usr . Eu não sei quais possibilidades de montagem de união o CentOS oferece se houver (claro, existem opções de terceiros, nativas ou baseadas no FUSE).

    
por 22.12.2011 / 02:26
1

Você pode usar ldconfig -v para ver se o ldconfig sabe sobre uma nova biblioteca. Eu finjo que a mensagem /usr/bin/ld: cannot find -lgenometools é durante a fase de vinculação do programa de compilação, não é? Então você deve dizer ao linker, onde ele pode encontrar uma biblioteca usando o parâmetro -L/mnt/lib .

    
por 22.12.2011 / 08:07