gcc tidak akan terhubung dengan -m32


23

Mencoba mengkompilasi bahkan program yang paling sederhana ( int main(){}) dengan -m32sistem 64-bit gagal:

$ gcc -m32 test.c
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status

Tampaknya masih keliru mencari di direktori yang salah ketika -m32ditentukan.

libgcc-4.8-dev:i386diinstal dan saya telah memverifikasi bahwa perpustakaan 32-bit berada di /usr/lib/gcc/i686-linux-gnu/4.8/.

Saya sudah mencoba pengaturan dan ekspor LD_INCLUDE_PATHdan LD_LIBRARY_PATHtidak berhasil.


Jawaban:


23

Pertama, Anda perlu menginstal "gcc-multilib" dan "g ++ - multilib"

sudo apt-get install gcc-multilib g++-multilib

Maka perintah Anda saat ini akan bekerja,

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped

2
Catatan: Untuk program C ++, g++-multilibjuga akan diperlukan.
Vladimir Panteleev

1
Pertimbangkan juga: libc6-dev-i386.
kenorb

0

Agar berhasil mengkompilasi kode C ke executable x86 32 Bit dalam lingkungan x86_64 Anda harus menginstal paket tambahan berikut:

sudo apt-get install libc6-dev-i386 gcc-multilib

Setelah panggilan kompilasi suka

$ gcc -m32 test.c -o test

berhasil.


0

Masalah ini juga terjadi ketika gccversi tidak cocok dengan versi gcc-multilib. Dalam hal ini Anda harus menginstal versi yang benar dari paket multilib. Sebagai contoh; Saya menggunakan versi gcc 4.6jadi saya harus menginstal gcc-4.6-multilibdan g++-4.6-multilibkarena gcc-multilibpaket default untuk 4.8.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.