Compilando la aplicación de 32 bits en 64 bits, no se puede encontrar -lX11

9

Estoy invocando un comando como:

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

Y conseguir

/usr/bin/ld: cannot find -lX11

He instalado los siguientes paquetes para admitir multiarch:

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

Pero fue en vano. No parece haber ningún X11.so en / usr / lib32, en realidad solo hay 52 bibliotecas en ese directorio. Tengo la impresión de que debería instalar manualmente las bibliotecas, pero no sé qué debo verificar a continuación.

Cualquier ayuda apreciada.

Franco
fuente
1
¿Puedes mostrar la salida del comando ldconfig -p | grep libX11\\.?
Martin Dirichs

Respuestas:

5

Necesita los archivos de encabezado, que son proporcionados por los -devpaquetes, y no en los paquetes de la biblioteca en sí. Entonces, intente instalar libx11-dev. Eso debería solucionar este error de compilación en particular, aunque puede obtener errores similares sobre otras bibliotecas (y luego puede instalar sus -devpaquetes).

Aunque estos paquetes proporcionan archivos de encabezado en lugar de archivos binarios, y en general los archivos de encabezado representan todas las arquitecturas compatibles mediante el uso de macros de preprocesador, sin embargo, los -devpaquetes en Ubuntu tienden a ser específicos de la arquitectura, y este es el caso para libx11-dev(como se puede ver aquí expandiendo un lanzamiento y encontrando los .debpaquetes listados para libx11-devese lanzamiento). Dado que su sistema Ubuntu es de 64 bits y está compilando un programa de 32 bits que debe vincularse con la versión de 32 bits de la biblioteca, probablemente necesitará instalar la versión de 32 bits libx11-dev. Si está instalando con apt-geto aptitude, puede especificarlo indicando libx11-dev:i386como el paquete para instalar (desde multarch es compatible y se está utilizando).

http://packages.ubuntu.com/ es un buen recurso para encontrar el nombre del -devpaquete correspondiente a un paquete de biblioteca. No siempre es el nombre del paquete de la biblioteca seguido inmediatamente por -dev; a veces los números de versión presentes en el nombre del paquete de la biblioteca, especialmente después de a -, están ausentes en el nombre del -devpaquete correspondiente .

Eliah Kagan
fuente