Wymuś kompilację 32-bitowych programów na platformie 64-bitowej

Mam własny program, który próbuję wykorzystać na 64-bitowym systemie.

Po uruchomieniu konfiguracji Działa ok, ale po tym jak próbuje się zaktualizować i skompilować niektóre moduły i nie ładuje ich.

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

Czy Jest jakiś sposób (jakieś zmienne środowiskowe czy coś w tym stylu) aby zmusić gcc do zrobienia wszystkiego dla 32 Platforma bit. Czy 32-bitowy chroot zadziała?

Author: Jure1873, 2010-08-17

3 answers

Musisz sprawić, by GCC używało flagi -m32.

Możesz spróbować napisać prosty skrypt powłoki do {[1] } i nazwać go gcc (upewnij się, że nie nadpisujesz oryginalnego gcc i upewnij się, że nowy skrypt pojawi się wcześniej w $PATH, i że używa pełnej ścieżki do GCC.

Myślę, że kod, którego potrzebujesz, jest po prostu czymś w rodzaju /bin/gcc -m32 $* w zależności od powłoki ({[4] } jest tam, aby zawierać wszystkie argumenty, chociaż może to być coś innego-bardzo ważne!)

 68
Author: Alan Pearce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-17 09:17:49

Możesz uzyskać 32-bitowy kod binarny stosując metodę Alana Pearce ' a, ale możesz również uzyskać błędy w następujący sposób:

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

Jeśli tak jest i masz apt-get, po prostu zainstaluj gcc-multilib

sudo apt-get install gcc-multilib 
 42
Author: Geoffrey R.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-20 06:40:23

Dla dowolnego kodu, który kompilujesz bezpośrednio za pomocą gcc/g++, będziesz musiał dodać opcję -m32 do wiersza poleceń kompilacji, po prostu edytuj swoje CFLAGS, CXXFLAGS i LDFLAGS zmiennych w Twoim Makefile.

Dla dowolnego kodu stron trzecich, którego możesz używać, musisz upewnić się podczas kompilacji, aby skonfigurować go do kompilacji krzyżowej. Uruchom ./configure --help i sprawdź, które opcje są dostępne. W większości przypadków możesz podać swoje CFLAGS, CXXFLAGS oraz LDFLAGS zmiennych do skryptu configure. Może być również konieczne dodanie --build i --host do skryptu configure, aby 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 nie powiedzie się, prawdopodobnie oznacza to, że musisz zainstalować niektóre 32-bitowe Pakiety programistyczne na 64-bitowej maszynie

 9
Author: e271p314,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 07:10:24