2008-10-19 13 views
29

मैं बाहरी संकलित ऑब्जेक्ट coreset.o का उपयोग कर प्रोग्राम को संकलित करने का प्रयास कर रहा था। मैंने public01.c परीक्षण फ़ाइल लिखा और मेरे फ़ंक्शन computation.c में हैं, जिनमें से दोनों संकलित हैं। हालांकि यह एक साथ जोड़ने पर विफल रहा है। क्या समस्या हो सकती है?जीसीसी त्रुटि: गलत ईएलएफ वर्ग: ELFCLASS64

gcc -o public01.x public01.o computation.o coreset.o 
ld: fatal: file coreset.o: wrong ELF class: ELFCLASS64 
ld: fatal: File processing errors. No output written to public01.x 
collect2: ld returned 1 exit status 

उत्तर

33

मुझे लगता है कि coreset.o 64-बिट के लिए संकलित किया गया था, और आप इसे 32-बिट गणना के साथ जोड़ रहे हैं।

आप gcc(1)

3

यह पता चला है कि मैं जिस कंपाइलर संस्करण का उपयोग कर रहा था वह coreset.o के साथ संकलित संस्करण से मेल नहीं खाता था।

एक 32 बिट था और दूसरा 64 बिट था। यदि कोई और इसी तरह की समस्या में चलता है तो मैं इसे छोड़ दूंगा।

3

यह वस्तु फ़ाइल एक 64-बिट toolchain को संकलित किया गया की तरह दिखता है की '-m64' ध्वज के साथ computation.c पुन: संयोजित करने के लिए कोशिश कर सकते हैं, और आप एक 32-बिट toolchain का उपयोग कर रहे । क्या आपने 32-बिट मोड में ऑब्जेक्ट फ़ाइल को पुन: संकलित करने का प्रयास किया है?

6

आप संकलन मोड का चयन करने के लिए '-m32' या '-m64' निर्दिष्ट कर सकते हैं।

ऑटोकॉन्फ (कॉन्फ़िगर) स्क्रिप्ट से निपटने पर, मैं आमतौर पर पर्यावरण में सीसी = "जीसीसी-एम 64" (या सीसी = "जीसीसी-एम 32") सेट करता हूं ताकि सबकुछ सही गति से संकलित हो। कम से कम, आमतौर पर ... लोगों को काफी काम नहीं करने के अंतहीन तरीके मिलते हैं, लेकिन मेरे बल्लेबाजी औसत बहुत अधिक हैं (95% से अधिक तरीका) इसके साथ।

+0

उत्सुक: 'CFLAGS = -m32' के बजाय' CC = gcc-m32' का उपयोग क्यों करें? –

+1

मुख्य रूप से क्योंकि CFLAGS में आमतौर पर _N_ अन्य महत्वपूर्ण झंडे होते हैं जिन्हें मैं ज़ैप नहीं करना चाहता (निर्देशिका शामिल करना, झंडे को परिभाषित करना, अनुकूलन और चेतावनी विकल्प इत्यादि)। –

2
sudo apt-get install ia32-libs 
+0

यह उत्तर संबंधित समस्या के लिए बहुत उपयोगी था: निष्पादन योग्य चलाने पर आप लगभग समान संदेश प्राप्त कर सकते हैं और यह उस समस्या का समाधान है। तो मुझसे एक धर्मार्थ +1। –

0

पैकेज ia32-libs उपलब्ध नहीं है, लेकिन इसे किसी अन्य पैकेज द्वारा संदर्भित किया जाता है। इसका मतलब यह हो सकता है कि पैकेज याद आ रही है, समाप्त कर दिया गया है, या एक अन्य स्रोत से ही उपलब्ध है फिर भी निम्न पैकेज इसे बदलना: lib32z1 lib32ncurses5

ई: पैकेज 'ia32-libs' नहीं स्थापना उम्मीदवार है

+0

यह एक उत्तर नहीं है। यदि आप इस त्रुटि संदेश में भाग रहे हैं, तो कृपया इसके बारे में एक नया प्रश्न पूछें। – HighCommander4

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