gcc -m32 ile bağlantı kurmayacak


23

64 bit sistemde simplest ( int main(){}) programını bile derlemeye çalışmak -m32başarısız oluyor:

$ 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

-m32Belirtildiğinde hala yanlış dizinlerde arama yapıyor gibi görünüyor .

libgcc-4.8-dev:i386yüklü ve 32-bit kitaplıkların içinde bulunduğunu doğruladım /usr/lib/gcc/i686-linux-gnu/4.8/.

Ben ayarlamak ve ihraç denedim LD_INCLUDE_PATHve LD_LIBRARY_PATHboşuna.


Related:
Nasıl Yapılır

Yanıtlar:


23

Öncelikle, "gcc-multilib" ve "g ++ - multilib" kurmanız gerekir.

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

O zaman şu anki emriniz işe yarayacak,

$ 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
Not: C ++ programları için g++-multilibayrıca gerekli olacaktır.
Vladimir Panteleev

1
Ayrıca düşünün: libc6-dev-i386.
kenorb

0

C kodunu x86_64 ortamındaki x86 32 Bit çalıştırılabilir programlarını başarıyla derlemek için aşağıdaki ek paketleri kurmanız gerekir:

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

Gibi bir derleme çağrısından sonra

$ gcc -m32 test.c -o test

başarılı olur.


0

Bu sorun, gccsürümün sürümüyle eşleşmediğinde de oluşur gcc-multilib. Bu durumda multilib paketlerinin doğru versiyonunu kurmalısınız. Örneğin; Ben gcc versiyonunu kullanıyordum, 4.6bu yüzden yüklemek zorunda kaldım gcc-4.6-multilibve g++-4.6-multilibvarsayılan gcc-multilibpaketlerdi 4.8.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.