Попытка скомпилировать даже самую простую ( 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
безрезультатно.
Ответы:
Во-первых, вам нужно установить "gcc-multilib" и "g ++ - multilib"
Тогда ваша текущая команда будет работать,
источник
g++-multilib
также потребуется.libc6-dev-i386
.Для успешной компиляции кода C в 32-битные исполняемые файлы x86 в среде x86_64 необходимо установить следующие дополнительные пакеты:
После вызова компиляции вроде
преуспевает.
источник
Эта проблема также возникает, когда
gcc
версия не совпадает с версиейgcc-multilib
. В этом случае вы должны установить правильную версию мультибиблиотечных пакетов. Например; Я использовал версию gcc,4.6
поэтому мне пришлось установитьgcc-4.6-multilib
иg++-4.6-multilib
потому чтоgcc-multilib
пакет по умолчанию был для4.8
.источник