gcc не будет связываться с -m32

Попытка скомпилировать даже самую простую (int main(){}) программу с -m32 в 64-битной системе не удалась:

$ 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
задан 23 April 2014 в 17:54

4 ответа

Во-первых, необходимо установить "gcc-мультиlib" и "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
0
ответ дан 23 April 2014 в 17:54

Для того, чтобы успешно скомпилировать код C в x86 исполняемые файлы на 32 бита в x86_64 среде необходимо установить следующие дополнительные пакеты:

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

После вызова компиляции как

$ gcc -m32 test.c -o test

успешно выполняется.

0
ответ дан 23 November 2019 в 01:29

Эта проблема также происходит когда gcc версия не соответствует версии gcc-multilib. В этом случае необходимо установить правильную версию пакетов мультиlib. Например; я использовал gcc версию 4.6 таким образом, я должен был установить gcc-4.6-multilib и g++-4.6-multilib потому что значение по умолчанию gcc-multilib пакет был для 4.8.

0
ответ дан 23 November 2019 в 01:29

У меня это работает. Я использую Ubuntu 18.04, x86-64.

Во-первых, gcc и gcc-Multilib должны соответствовать версиям друг друга. Если на вашем компьютере установлено несколько версий gcc, вам необходимо указать одну версию в качестве приоритетной. Например, я выбираю gcc 4.8:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 51

Чем больше последнее указанное число, тем больший приоритет он получает. Вы можете проверить их с помощью этой команды:

update-alternatives --config gcc

Затем вам необходимо установить версию gcc-Multilib , которая соответствует версии gcc:

sudo apt-get install gcc-4.8-multilib

Готово.

2
ответ дан 6 January 2020 в 12:51

Другие вопросы по тегам:

Похожие вопросы: