Setelah berjam-jam googling, saya memutuskan untuk menyerah dan bertanya kepada Anda para ahli. Saya mencoba membangun aplikasi 32-bit (xgap kalau ada yang tertarik) di 64 Ubuntu 11.10 saya. Saya menambahkan CFLAGS = -m32 dan LDFLAGS = -L / usr / lib32 di makefile. Benda-benda dibangun menjadi 32 bit baik-baik saja. Langkah terakhir adalah menautkan semua objek dan pustaka untuk X windows ke dalam executable ini --- xgap. Entah bagaimana itu terus memberi saya kesalahan ini:
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
...
Saya telah menginstal ia32-libs dan dukungan mutilib . Saya pikir saya hanya perlu memaksa linker untuk menghasilkan output i386. Saya mencoba untuk meletakkan dua flag ld di perintah gcc saya seperti yang ditunjukkan di atas: -melf_i386 dan -oformat elf32-i386 . Tetapi yang terjadi adalah gcc tidak lagi mencari pustaka 32 bit di / usr / lib32 . Saya ingin tahu apakah saya harus meletakkan bendera-bendera itu dalam urutan yang tetap?
Terima kasih atas ide dan bantuannya!
EDIT: ketika saya menambahkan flag -m32 di perintah gcc terakhir saya (tahap menghubungkan saya percaya), bahkan jika saya memiliki flag -L / usr / lib32 di tempat, gcc tidak mencari di / usr / lib32 lagi (sungguh aneh ...) dan menghasilkan kesalahan berikut:
/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
Adakah yang tahu mengapa ini terjadi? Saya menggunakan alat otomatis untuk mengkonfigurasi dan membuat. Saya sangat pandai memodifikasi file skrip tersebut.
EIDT : Saya memecahkan masalah. Saya pikir gcc mengharapkan arsip perpustakaan statis. Saya menggunakan skrip getlibs dari http://ubuntuforums.org/showthread.php?t=474790 untuk mengunduh semua arsip .a yang diperlukan untuk menautkan. Lalu gcc bekerja. Saya pikir gcc memang mencari di direktori / usr / lib32 tetapi tidak menemukan arsip .a kemudian mencari di direktori standar yaitu / usr / lib , di mana ia menemukan file * .so yang tidak kompatibel .
Tetapi kemudian pertanyaannya adalah: file * .so di / usr / lib32 / dari paket ia32-libs tidak benar-benar memiliki perpustakaan yang diperlukan untuk menghubungkan? Untuk apa file-file di / usr / lib32 / digunakan?