2010-08-17 28 views
54

64 bit sistemde kullanmaya çalıştığım özel bir programım var.64 bit platformda 32 bit programları derlemek için gcc gç

Kurulumu başlattığımda, tamam çalışıyor, ancak kendisini güncelleştirmeye ve bazı modülleri derlemeye çalıştıktan sonra bunları yüklemede başarısız oluyor.

Şüpheleniyorum çünkü gcc kullanıyor ve gcc 64 bit sistem için derlemeye çalışıyor ve bu nedenle bu program bu modülleri kullanamıyor.

32cc'lik bir platform için gcc'yi zorlamak için herhangi bir yol (bazı çevresel değişkenler ya da bunun gibi bir şey) var mı? 32 bitlik chroot çalışır mı?

+0

Yığın akışına göndermeyi deneyin. Muhtemelen iyi bir yanıt alacaksınız –

+0

Sorun, programı yüklemekle değil, yazarak @Nathan –

+0

mümkün kopya [Nasıl 64-bit linux makinede bir 32-bit bir ikili derlemek nasıl gcc/cmake] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

cevap

67

GCC'yi -m32 bayrağını kullanmanız gerekir.

$PATH'unuza basit bir kabuk komut dosyası yazmayı ve gcc olarak adlandırmayı (orijinal gcc'nin üzerine yazmadığınızdan emin olun ve yeni komut dosyasının $PATH'da daha önce geldiğinden emin olun ve bu dosyanın tam yolunu kullanmasını sağlayın. . GCC

sana ihtiyacım kod sadece kabuk bağlı /bin/gcc -m32 $* gibi bir şey olduğunu düşünüyorum (bu başka bir şey olabilir, ancak $*, tüm argümanları dahil etmek var! - çok önemli) bir

+14

Ayrıca ihtiyacınız olacak 32bit C kütüphanesinin yanı sıra bazı harici kütüphanelerin 32 bit versiyonları programın bazı durumlarda karşılığını vermektedir. –

+5

Gerçekten. Standart kütüphaneler: C: 'apt-get install gcc-multilib'; C++: 'apt-get install g ++ - multilib '. – Bart

41

alabilirsiniz Alan Pearce'ın yöntemini uygulayarak 32 bit ikili, ancak aşağıdaki gibi hatalar da alabilirsiniz:

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

ve apt-get varsa, sadece gcc-multilib sen gcc/g++ kullanarak doğrudan derlemek herhangi kodu için

sudo apt-get install gcc-multilib 
+0

C++ projeleri için sudo apt-get install gcc-multilib g ++ - multilib'. – phoenix

8

yükledikten -m32 seçeneği eklemek gerekecektir derleme komut satırına, Makefile ürününüzdeki CFLAGS, CXXFLAGS ve LDFLAGS değişkenlerinizi düzenleyin.

Kullandığınız herhangi bir üçüncü taraf kodu için çapraz derleme için yapılandırmak üzere oluşturduğunuzdan emin olmalısınız. ./configure --help'u çalıştırın ve hangi seçeneğin mevcut olduğunu görün. Çoğu durumda, yapılandırma komut dosyasına CFLAGS, CXXFLAGS ve LDFLAGS değişkenlerinizi sağlayabilirsiniz. derleme Bu başarısız olursa Ayrıca muhtemelen size 64 bitlik makine üzerinde bazı 32 bit geliştirme paketlerini yüklemeniz gerekir demektir sen

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

gibi bir şey ile bitirmek böylece yapılandırmak senaryoya --build ve --host eklemeniz gerekebilir

İlgili konular