2010-08-17 5 views
54

मेरे पास एक स्वामित्व प्रोग्राम है जिसे मैं 64 बिट सिस्टम पर उपयोग करने का प्रयास कर रहा हूं।64 बिट प्लेटफॉर्म पर 32 बिट प्रोग्राम संकलित करने के लिए फोर्स जीसीसी

जब मैं सेटअप लॉन्च करता हूं तो यह ठीक काम करता है, लेकिन इसके बाद यह खुद को अपडेट करने और कुछ मॉड्यूल संकलित करने का प्रयास करता है और यह उन्हें लोड करने में विफल रहता है।

मुझे संदेह है क्योंकि यह जीसीसी और जीसीसी का उपयोग कर 64 बिट सिस्टम के लिए संकलित करने की कोशिश करता है और इसलिए यह प्रोग्राम इन मॉड्यूल का उपयोग नहीं कर सकता है।

32 बिट प्लेटफ़ॉर्म के लिए सबकुछ करने के लिए जीसीसी को मजबूर करने के लिए कोई तरीका है (कुछ पर्यावरणीय चर या ऐसा कुछ)। क्या 32 बिट क्रोट काम करेगा?

+0

स्टैक ओवरफ्लो पर पोस्ट करने का प्रयास करें। आपको शायद –

+0

पर एक अच्छी प्रतिक्रिया मिल जाएगी समस्या यह प्रोग्राम स्थापित करने के साथ है, इसे लिखने के लिए @ नाथन –

+0

संभव डुप्लिकेट [जीसीसी/सेमेक के साथ 64-बिट लिनक्स मशीन पर 32-बिट बाइनरी कैसे संकलित करें] (http : //stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake) –

उत्तर

67

आपको जीसीसी को -m32 ध्वज का उपयोग करने की आवश्यकता है।

आप अपने $PATH के लिए एक सरल खोल स्क्रिप्ट लिखने का प्रयास करें और यह जीसीसी फोन (सुनिश्चित करें कि आप मूल जीसीसी के ऊपर लिख नहीं है, और यकीन है कि नई स्क्रिप्ट, $PATH में पहले आता है बनाने बनाने के लिए और यह करने के लिए पूरा पथ का उपयोग करता है हो सकता है । जीसीसी

मुझे लगता है कि कोड की जरूरत है सिर्फ अपने खोल के आधार पर /bin/gcc -m32 $* की तरह कुछ है ($* हालांकि यह कुछ और हो सकता है सभी तर्क शामिल करने के लिए नहीं है, - बहुत महत्वपूर्ण)

+14

आपको भी इसकी आवश्यकता होगी 32 बिट सी लाइब्रेरी, साथ ही साथ कुछ बाहरी पुस्तकालयों के 32 बिट संस्करण कुछ मामलों में कार्यक्रम के खिलाफ लिंक करते हैं। वास्तव में –

+5

। मानक पुस्तकालय: सी: 'apt-get gcc-multilib स्थापित करें'; सी ++: 'apt-get g ++ इंस्टॉल करें - multilib'। – Bart

41

तुम एक मिल सकता है एलन पीयर्स की विधि को लागू करके 32-बिट बाइनरी, लेकिन आपको निम्न त्रुटियां भी मिल सकती हैं:

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

यदि यह स्थिति है और अगर आप apt-get है, बस जीसीसी-multilib

sudo apt-get install gcc-multilib 
+0

सी ++ परियोजनाओं के लिए, 'sudo apt-get gcc-multilib g ++ - multilib' स्थापित करें। – phoenix

8

किसी भी कोड है कि आप सीधे संकलन gcc/g++ उपयोग करने के लिए स्थापित करें, तो आप -m32 विकल्प जोड़ने की आवश्यकता होगी संकलन कमांड लाइन में, बस अपने CFLAGS, CXXFLAGS और LDFLAGS अपने Makefile में चर संपादित करें।

किसी भी तृतीय पक्ष कोड के लिए आप इसका उपयोग कर रहे हैं, आपको यह सुनिश्चित करना होगा कि जब आप क्रॉस संकलन के लिए इसे कॉन्फ़िगर करने के लिए इसे बनाते हैं। ./configure --help चलाएं और देखें कि कौन सा विकल्प उपलब्ध है। ज्यादातर मामलों में आप कॉन्फ़िगरेशन स्क्रिप्ट में CFLAGS, CXXFLAGS और LDFLAGS चर प्रदान कर सकते हैं। तुम भी कॉन्फ़िगर स्क्रिप्ट ताकि आप

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

की तरह कुछ के साथ समाप्त करने के लिए --build और --host जोड़ने के लिए संकलन इसके विफल होने पर शायद इसका मतलब है कि आप अपने 64 बिट मशीन पर कुछ 32 बिट विकास संकुल स्थापित करने की आवश्यकता की जरूरत हो सकती

संबंधित मुद्दे