gcc не зв’яжеться з -m32


23

Спроба скомпілювати навіть найпростішу ( int main(){}) програму з -m3264-бітовою системою не вдається:

$ 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

Схоже, все ще помилково шукають у неправильних каталогах, коли -m32вказано.

libgcc-4.8-dev:i386встановлено, і я переконався, що 32-бітні бібліотеки знаходяться в /usr/lib/gcc/i686-linux-gnu/4.8/.

Я намагався налаштувати та експортувати, LD_INCLUDE_PATHі LD_LIBRARY_PATHбезрезультатно.


Відповіді:


23

Спочатку потрібно встановити "gcc-multilib" і "g ++ - multilib"

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

Тоді ваша поточна команда спрацює,

$ 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
Примітка. Для програм C ++ g++-multilibтакож буде потрібно.
Володимир Пантелеєв

1
Розглянемо також: libc6-dev-i386.
kenorb

0

Для успішного компіляції коду C до 32-бітного файлу x86 в середовищі x86_64 вам потрібно встановити наступні додаткові пакети:

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

Після дзвінка компіляції, як

$ gcc -m32 test.c -o test

вдається.


0

Ця проблема також виникає, коли gccверсія не відповідає версії gcc-multilib. У цьому випадку вам слід встановити правильну версію пакунків для багатолітра. Наприклад; Я використовував версію gcc, 4.6тому мені довелося встановити gcc-4.6-multilibі g++-4.6-multilibтому, що gcc-multilibпакет за замовчуванням був для 4.8.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.