Depois de horas pesquisando no Google, decido desistir e pedir a você especialistas. Estou tentando criar um aplicativo de 32 bits (xgap se alguém estiver interessado) no meu 64 Ubuntu 11.10. I adicionou-se o CFLAGS = -m32 e o LDFLAGS = -L / usr / lib32 no makefile. Os objetos são incorporados em 32 bits. O último passo é vincular todos os objetos e bibliotecas das janelas X neste executável --- xgap. De alguma forma, ele continua me dando este erro:
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
...
Eu instalei o ia32-libs e o suporte a mutilib . Eu acho que só preciso forçar o vinculador a gerar uma saída i386. Tentei colocar dois sinalizadores ld no meu comando gcc, como mostrado acima: -melf_i386 e -oformat elf32-i386 . Mas o que acontece é que o gcc não procura mais a biblioteca de 32 bits em / usr / lib32 . Será que preciso colocar essas bandeiras em alguma ordem fixa?
Obrigado por qualquer idéia e ajuda!
EDIT: quando adiciono o sinalizador -m32 no meu último comando gcc (o estágio de vinculação que acredito), mesmo se eu tiver o sinalizador -L / usr / lib32 no lugar, o gcc não pesquisará mais em / usr / lib32 (realmente estranho ...) e gera o seguinte erro:
/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
Alguém tem alguma idéia de por que isso acontece? Estou usando a ferramenta automática para configurar e criar. Eu sou realmente bom em modificar esses arquivos de script.
EIDT : Eu resolvi o problema. Eu acho que o gcc estava esperando um arquivo de biblioteca estática. Eu usei o script getlibs em http://ubuntuforums.org/showthread.php?t=474790 para baixar todos os arquivos .a necessários para vincular. Então gcc trabalhou. Eu acho que o gcc pesquisou no diretório / usr / lib32 , mas não encontrou os arquivos .a, então procurou no diretório padrão que é / usr / lib , onde encontra os arquivos * .so incompatíveis .
Mas, então, a pergunta é: o * .so arquivos em / usr / lib32 / do pacote ia32-libs não realmente ter as bibliotecas necessárias para vincular? Para que são usados esses arquivos em / usr / lib32 / ?