Compilando 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

Instalei os seguintes pacotes para oferecer suporte ao 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 manualmente as bibliotecas, mas não sei o que devo verificar a seguir.

Qualquer ajuda apreciada.

Frank
fonte
1
Você pode mostrar a saída do comando ldconfig -p | grep libX11\\.?
Martin Dirichs 18/10/12

Respostas:

5

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

Embora esses pacotes forneçam arquivos de cabeçalho em vez de binários e, em geral, os arquivos de cabeçalho sejam responsáveis ​​por todas as arquiteturas suportadas pelo uso de macros de pré-processador, os -devpacotes no Ubuntu tendem a ser específicos da arquitetura, e é o caso libx11-dev(como pode ser visto aqui expandindo um release e localizando os .debpacotes listados libx11-devnesse release). Como 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, você provavelmente precisará instalar a versão de 32 bits libx11-dev. Se você estiver instalando com apt-getou aptitude, poderá especificar isso indicando libx11-dev:i386como o pacote a instalar (uma vez que o multarch é suportado e está sendo usado).

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

Eliah Kagan
fonte