gnupg 'libgpg-error.so.0 nenhuma informação de versão disponível'

2

Estou tentando compilar o gnupg-2.1.0 para o Debian Wheezy, eu baixei e compilei as bibliotecas necessárias ( libgpg-error-1.17 , libgcrypt-1.6.2 , libksba-1.3.2 , libassuan-2.1.3 e pth-2.0.7 naquele ordem) via ./configure , make , make install . Em seguida, adicionei /usr/local/lib a /etc/ld.so.conf e depois executei ldconfig para que o gnupg pudesse encontrar as bibliotecas.

Gpupg compila bem, mas ao tentar executar ./agent/gpg-agent ou ./g10/g , recebi este erro:

alpha@virtual:~/gnupg-2.1.0$ ./agent/gpg-agent --version
./agent/gpg-agent: /lib/i386-linux-gnu/libgpg-error.so.0: no version information available (required by ./agent/gpg-agent)
./agent/gpg-agent: /lib/i386-linux-gnu/libgpg-error.so.0: no version information available (required by /usr/local/lib/libgcrypt.so.20)
./agent/gpg-agent: relocation error: ./agent/gpg-agent: symbol gpgrt_set_alloc_func, version GPG_ERROR_1.0 not defined in file libgpg-error.so.0 with link time reference

ldd ./agent/gpg-agent produz

root@virtual:/home/alpha/gnupg-2.1.0# ldd ./agent/gpg-agent
./agent/gpg-agent: /lib/i386-linux-gnu/libgpg-error.so.0: no version information available (required by ./agent/gpg-agent)
./agent/gpg-agent: /lib/i386-linux-gnu/libgpg-error.so.0: no version information available (required by /usr/local/lib/libgcrypt.so.20)
        linux-gate.so.1 =>  (0xb7750000)
        libgcrypt.so.20 => /usr/local/lib/libgcrypt.so.20 (0xb7698000)
        libgpg-error.so.0 => /lib/i386-linux-gnu/libgpg-error.so.0 (0xb7694000)
        libassuan.so.0 => /usr/lib/i386-linux-gnu/libassuan.so.0 (0xb7681000)
        libnpth.so.0 => /usr/local/lib/libnpth.so.0 (0xb767d000)
        libpthread.so.0 => /lib/i386-linux-gnu/i686/cmov/libpthread.so.0 (0xb7664000)
        libc.so.6 => /lib/i386-linux-gnu/i686/cmov/libc.so.6 (0xb74ff000)
        librt.so.1 => /lib/i386-linux-gnu/i686/cmov/librt.so.1 (0xb74f6000)
        /lib/ld-linux.so.2 (0xb7751000)

Por que esse erro ocorreu e como posso corrigi-lo?

Resolução

Resolvido adicionando / usr / local / lib a LD_LIBRARY_PATH via export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} e echo /usr/local/lib > /etc/ld.so.conf.d/local.conf

    
por AlphaDelta 26.11.2014 / 02:27

2 respostas

4

Causa raiz do problema

O erro está ocorrendo porque, em tempo de compilação, ele está pesquisando corretamente o caminho /usr/local/lib antes de pesquisar o caminho padrão do sistema, assim, no momento do link, todos os símbolos são resolvidos. No entanto, em tempo de execução, o caminho /usr/local/lib não é pesquisado antes do /lib/i386-linux-gnu preexistente, de forma que ele encontre a biblioteca com nome idêntico no último diretório antes da biblioteca desejada em /usr/local/lib .

Solução, versão fácil: caminho de pesquisa da biblioteca global (com ressalva)

A versão fácil é inserir /usr/local/lib na variável de ambiente LD_LIBRARY_PATH ou /etc/ld.so.conf config e executar ldconfig . Para a solução "rápida", você quer /usr/local/lib antes de mais nada.

No entanto, esse é o azarado, você não quer forçar todos os seus programas a pesquisar /usr/local/lib antes do caminho da biblioteca do sistema (por exemplo: /lib/i386-linux-gnu ) - isso faz com que É altamente provável que você cause um conflito de versões com uma biblioteca do sistema usada por outro programa fornecido pelo seu sistema ou pelo gerenciador de pacotes e faça com que o programa do sistema falhe. Isso significa "fazer as coisas corretamente", você não deseja usar LD_LIBRARY_PATH , LD_PRELOAD ou /etc/ld.so.conf para forçar seu caminho de pesquisa. ( Na verdade, LD_PRELOAD deve ser evitado fora do trabalho de desenvolvimento )

Solução, versão estável: atualizar o ELF RPATH

Em vez disso, ao compilar suas próprias versões de aplicativos, você pode usar a variável de ambiente LD_RUN_PATH (gnu ld & gold) ou definir LDFLAGS to -Wl,-rpath /usr/local/lib para gerenciar o caminho interno de pesquisa da biblioteca de seus binários (incluindo dependências de bibliotecas compartilhadas .so)

Por exemplo, você pode executar o seguinte para configurar sua biblioteca:

export LD_RUN_PATH=/usr/local/lib
./configure --prefix=/usr/local <--yourflags>
make install

Minha experiência com essa técnica está no HP-UX, onde o utilitário chatr mostrará o rpath incorporado (e o sinalizador de link é +b em vez de -rpath). readelf ou objdump provavelmente mostrará o rpath no linux.

O

patchelf afirma ser capaz de atualizar o rpath em binários existentes no linux x86, mas eu mesmo não testei.

    
por 26.11.2014 / 03:48
1

Eu tive os mesmos problemas com o Ubuntu (12 e 14 e 16, Gnome e Xfce, máquinas completamente diferentes ...) e Eu compilei todo o material do zero. Interessante, não ajuda em nada. mesmos erros: Versão 2 requerida, nenhuma comunicação com pinagem e assim por diante.

Removido o antigo 1.4 - erro estúpido! Eles são projetados para coexistir (1.xe 2.x).

A solução realmente foi esta: Instale o gnupg2 com o Ubuntu CLI:

sudo apt-get install gnupg2 

fez o trabalho. Com todas as 4 máquinas e todas as versões. Tão simples, tão legal. Funciona como um encanto :-) RESOLVIDO (pelo menos no meu zoológico de instalações)

    
por 11.12.2016 / 01:57