Compilando o aplicativo de 32 bits em 64 bits, não é possível encontrar -lX11

9

Estou invocando um comando como:

g++ ... -o"myapp" -lX11 ...

E recebendo

/usr/bin/ld: cannot find -lX11

Eu instalei os seguintes pacotes para suportar multiarch:

ia32-libs, libc6-dev-i386 and g++-multilib

Mas sem sucesso. Não parece haver nenhum X11.so em / usr / lib32, na verdade existem apenas 52 bibliotecas nesse diretório. Tenho a impressão de que você deve instalar bibliotecas manualmente, mas não sei o que devo verificar em seguida.

Qualquer ajuda apreciada.

    
por Frank 21.08.2012 / 17:38

1 resposta

5

Você precisa dos arquivos de cabeçalho, que são fornecidos por -dev packages e não nos próprios pacotes da biblioteca. Então, tente instalar libx11-dev . Isso deve corrigir esse erro de compilação específico, embora você possa obter erros semelhantes sobre outras bibliotecas (e, em seguida, instalar os pacotes -dev ).

Embora esses pacotes forneçam arquivos de cabeçalho em vez de binários, e em geral os arquivos de cabeçalho são responsáveis por todas as arquiteturas suportadas através do uso de macros de pré-processador, no entanto, -dev packages no Ubuntu tendem a ser específicos da arquitetura, e este é o caso para libx11-dev (como pode ser visto aqui expandindo uma versão e encontrando os pacotes .deb listados para libx11-dev nessa versão). Como o seu sistema Ubuntu é de 64 bits e você está compilando um programa de 32 bits que deve ser vinculado à versão de 32 bits da biblioteca, provavelmente será necessário instalar a versão de 32 bits do libx11-dev . Se você estiver instalando com apt-get ou aptitude , poderá especificar isso indicando libx11-dev:i386 como o pacote a ser instalado (desde O multarch é suportado e está sendo usado).

O

link é um bom recurso para encontrar o nome do pacote -dev correspondente a um pacote de biblioteca. Nem sempre o nome do pacote da biblioteca é seguido imediatamente por -dev ; às vezes os números de versão presentes no nome do pacote da biblioteca, especialmente após um - , estão ausentes no nome do pacote -dev correspondente.

    
por Eliah Kagan 24.08.2012 / 06:01