Próba kompilacji nawet najprostszego ( int main(){}
) programu -m32
w systemie 64-bitowym kończy się niepowodzeniem:
$ 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
Wydaje się, że nadal błędnie przeszukuje niewłaściwe katalogi, gdy -m32
jest określony.
libgcc-4.8-dev:i386
jest zainstalowany i sprawdziłem, czy biblioteki 32-bitowe znajdują się w /usr/lib/gcc/i686-linux-gnu/4.8/
.
Próbowałem ustawić i eksportować LD_INCLUDE_PATH
i LD_LIBRARY_PATH
bezskutecznie.
Odpowiedzi:
Najpierw musisz zainstalować „gcc-multilib” i „g ++ - multilib”
Wtedy twoje obecne polecenie zadziała,
źródło
g++-multilib
Wymagane będą także programy C ++ .libc6-dev-i386
.Aby pomyślnie skompilować kod C do 32-bitowych plików wykonywalnych x86 w środowisku x86_64, musisz zainstalować następujące dodatkowe pakiety:
Po wywołaniu kompilacji jak
udaje się.
źródło
Ten problem występuje również wtedy, gdy
gcc
wersja nie pasuje do wersjigcc-multilib
. W takim przypadku powinieneś zainstalować poprawną wersję pakietów multilib. Na przykład; Używałem wersji gcc,4.6
więc musiałem zainstalowaćgcc-4.6-multilib
ig++-4.6-multilib
ponieważgcc-multilib
był to domyślny pakiet4.8
.źródło