Dopo ore di google, decido di arrendermi e chiederti esperti. Sto cercando di creare un'applicazione a 32 bit (xgap se qualcuno è interessato) nel mio 64 Ubuntu 11.10. Ho aggiunto CFLAGS = -m32 e LDFLAGS = -L / usr / lib32 nel makefile. Gli oggetti sono integrati in 32 bit bene. L'ultimo passo è quello di collegare tutti gli oggetti e le librerie per X windows in questo eseguibile --- xgap. In qualche modo continua a darmi questo errore:
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
...
Ho installato ia32-libs e supporto mutilib . Penso di dover solo forzare il linker a generare un output i386. Ho provato a inserire due flag LD nel mio comando gcc come mostrato sopra: -melf_i386 e -oformat elf32-i386 . Ma quello che succede è che gcc non cerca più la libreria a 32 bit in / usr / lib32 . Mi chiedo se devo mettere quelle bandiere in un ordine fisso?
Grazie per qualsiasi idea e aiuto!
EDIT: quando aggiungo il flag -m32 nel mio ultimo comando gcc (credo lo stadio di collegamento), anche se ho il flag -L / usr / lib32, gcc non cerca più in / usr / lib32 (davvero strano ...) e genera il seguente errore:
/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
Qualcuno ha idea del perché questo accada? Sto usando lo strumento automatico per configurare e creare. Sono davvero bravo a modificare quei file di script.
EIDT : ho risolto il problema. Penso che gcc si aspettasse un archivio di librerie statiche. Ho usato lo script getlibs da http://ubuntuforums.org/showthread.php?t=474790 per scaricare tutti gli archivi .a necessari per il collegamento. Quindi gcc ha funzionato. Penso che gcc abbia cercato nella directory / usr / lib32 ma non abbia trovato gli archivi .a, quindi ho cercato nella directory standard che è / usr / lib , dove trova i file * .so incompatibili .
Ma allora la domanda è: i file * .so in / usr / lib32 / dal pacchetto ia32-libs non hanno davvero le librerie necessarie per il collegamento? A cosa servono quei file in / usr / lib32 / ?