2010-08-17 11 views
54

Posiadam zastrzeżony program, którego próbuję użyć w systemie 64-bitowym.Wymuś GCC do kompilacji programów 32-bitowych na platformie 64-bitowej

Po uruchomieniu instalacji działa poprawnie, ale po próbie aktualizacji i kompilacji niektórych modułów nie można ich załadować.

Podejrzewam, że to dlatego, że używa gcc, a gcc próbuje je skompilować dla systemu 64-bitowego i dlatego ten program nie może korzystać z tych modułów.

Czy istnieje sposób (niektóre zmienne środowiskowe lub coś w tym stylu), aby wymusić gcc, aby zrobił wszystko dla platformy 32-bitowej. Czy 32-bitowy chroot działa?

+0

Spróbuj wysłać do stackoverflow. Prawdopodobnie dostaniesz tam dobrą odpowiedź –

+0

Problem polega na zainstalowaniu programu, a nie na napisaniu go @Nathan –

+0

możliwy duplikat [Jak skompilować 32-bitową wersję binarną na 64-bitowej maszynie linux z gcc/cmake] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

Odpowiedz

67

Musisz użyć GCC, używając flagi -m32.

Można spróbować napisać prosty skrypt do $PATH i nazwać gcc (upewnij się, że nie zastąpienie oryginalnego gcc, i upewnij się, że nowy skrypt przychodzi wcześniej w $PATH i że wykorzystuje pełną ścieżkę dostępu do . GCC

Myślę, że kod trzeba to po prostu coś /bin/gcc -m32 $* w zależności od powłoki (the $* ma obejmować wszystkie argumenty, chociaż może to być coś innego - bardzo ważne)

+14

Będziesz także potrzebować Biblioteka 32-bitowa C, a także 32-bitowe wersje dowolnych zewnętrznych bibliotek, do których program łączy się w niektórych przypadkach. –

+5

Rzeczywiście. Standardowe biblioteki: C: 'apt-get install gcc-multilib'; C++: 'apt-get install g ++ - multilib'. – Bart

41

może pojawić się 32-bitowa wersja binarna za pomocą metody Alana Pearce'a, ale możesz również uzyskać następujące błędy:

fatal error: bits/predefs.h: No such file or directory 

Jeśli jest to przypadek, a jeśli masz apt-get, wystarczy zainstalować gcc-multilib

sudo apt-get install gcc-multilib 
+0

Dla projektów C++, 'sudo apt-get install gcc-multilib g ++ - multilib'. – phoenix

8

Dla każdego kodu skompilować bezpośrednio za pomocą gcc/g++, trzeba będzie dodać -m32 opcję do linii poleceń kompilacji, po prostu edytuj zmienne CFLAGS, CXXFLAGS i LDFLAGS w swoim Makefile.

Dla dowolnego kodu firmy zewnętrznej, którego używasz, musisz się upewnić, że po zbudowaniu go skonfigurujesz do kompilacji krzyżowej. Uruchom ./configure --help i sprawdź, która opcja jest dostępna. W większości przypadków możesz podać zmienne CFLAGS, CXXFLAGS i LDFLAGS w skrypcie konfiguracyjnym. Również może trzeba dodać --build i --host do skryptu configure więc skończyć z czymś takim

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu 

Jeśli kompilacja się nie powiedzie to zapewne oznacza, że ​​trzeba zainstalować niektórych pakietów rozwojowych 32 bitowych na bitowej maszynie 64

Powiązane problemy