Después de horas de buscar en Google, decido rendirme y pedirles expertos. Estoy tratando de construir una aplicación de 32 bits (xgap si alguien está interesado) en mi 64 Ubuntu 11.10. Añadí la CFLAGS = -m32 y la LDFLAGS = -L / usr / lib32 en el makefile. Los objetos están integrados en 32 bits bien. El último paso es vincular todos los objetos y bibliotecas para X windows en este ejecutable --- xgap. De alguna manera me sigue dando este error:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
He instalado ia32-libs y soporte de mutilib . Creo que solo necesito forzar el enlazador para generar una salida i386. Traté de poner dos banderas ld en mi comando gcc como se muestra arriba: -melf_i386 y -oformat elf32-i386 . Pero lo que sucede es que gcc ya no busca la biblioteca de 32 bits en / usr / lib32 . Me pregunto si necesito poner esas banderas en un orden fijo.
Gracias por cualquier idea y ayuda!
EDITAR: cuando agrego el indicador -m32 en mi último comando gcc (la etapa de vinculación, creo), incluso si tengo el indicador -L / usr / lib32 en su lugar, gcc ya no busca en / usr / lib32 (realmente raro ...) y genera el siguiente error:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
¿Alguien tiene alguna idea de por qué sucede esto? Estoy usando la herramienta automática para configurar y hacer. Soy realmente bueno modificando esos archivos de script.
EIDT : resolví el problema. Creo que gcc esperaba un archivo de biblioteca estática. Utilicé el script getlibs de http://ubuntuforums.org/showthread.php?t=474790 para descargar todos los archivos .a necesarios para vincular. Entonces gcc funcionó. Creo que gcc hizo la búsqueda en / usr / lib32 directorio, pero no encontró los .a archivos así que fuimos a buscar en el directorio estándar que es / usr / lib , donde se encuentra el incompatibles * .so archivos.
Pero entonces la pregunta es: ¿los archivos * .so en / usr / lib32 / del paquete ia32-libs realmente no tienen las bibliotecas necesarias para vincular? ¿Para qué se usan esos archivos en / usr / lib32 / ?