2009-09-24 12 views
14

के साथ 32-बिट बनाएं मेरे पास llvm-gcc का 64-बिट संस्करण है, लेकिन मैं 32-बिट और 64-बिट दोनों बाइनरी बनाने में सक्षम होना चाहता हूं। क्या इसके लिए कोई झंडा है? मैं -m32 (जो नियमित रूप से जीसीसी पर काम करता है) गुजर कोशिश की, लेकिन मैं इस तरह एक त्रुटि संदेश मिलता है:64-बिट llvm-gcc

[[email protected]]$ llvm-gcc -m32 test.c -o test 
Warning: Generation of 64-bit code for a 32-bit processor requested. 
Warning: 64-bit processors all have at least SSE2. 
/tmp/cchzYo9t.s: Assembler messages: 
/tmp/cchzYo9t.s:8: Error: bad register name `%rbp' 
/tmp/cchzYo9t.s:9: Error: bad register name `%rsp' 
... 

यह पीछे की ओर है; मैं 64-बिट प्रोसेसर के लिए 32-बिट कोड जेनरेट करना चाहता हूं!

मैं llvm-gcc 4.2 चला रहा हूं, जो उबंटू 9.04 x86-64 के साथ आता है।


संपादित करें: यहाँ जब मैं -v ध्वज के साथ LLVM-जीसीसी चलाने उत्पादन के प्रासंगिक हिस्सा है:

[[email protected]]$ llvm-gcc -v -m32 test.c -o test.bc 
Using built-in specs. 
Target: x86_64-linux-gnu 
Configured with: ../llvm-gcc4.2-2.2.source/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --prefix=/usr/lib/llvm/gcc-4.2 --enable-languages=c,c++ --program-prefix=llvm- --enable-llvm=/usr/lib/llvm --enable-threads --disable-nls --disable-shared --disable-multilib --disable-bootstrap 
Thread model: posix 
gcc version 4.2.1 (Based on Apple Inc. build 5546) (LLVM build) 
/usr/lib/llvm/gcc-4.2/libexec/gcc/x86_64-linux-gnu/4.2.1/cc1 -quiet -v -imultilib . test.c -quiet -dumpbase test.c -m32 -mtune=generic -auxbase test -version -o /tmp/ccw6TZY6.s 

मैं में देखा/usr/lib/LLVM/gcc- 4.2/libexec/gcc एक और बाइनरी खोजने की उम्मीद कर रहा है, लेकिन एकमात्र निर्देशिका x86_64-linux-gnu है। मैं संभवतः अगले विकल्पों के साथ स्रोत से llvm-gcc संकलित करने पर विचार करूंगा।

+0

आपको जो त्रुटि संदेश मिल रहा है वह वास्तव में अजीब है; क्या आप -v के साथ संकलित कर सकते हैं और पूर्ण तर्क सूची पोस्ट कर सकते हैं जो llvm-gcc वास्तव में उपयोग कर रहा है? –

+0

वर्बोज आउटपुट के साथ अपडेट किया गया। –

उत्तर

5

कोशिश सेटिंग:

export CFLAGS="-m32" 
export LDFLAGS="-m32" 
संकलन से पहले

...

+0

llvm-gcc इन दोनों को अनदेखा करता है और 64-बिट संस्करण बनाता है। –

+0

क्या आपने इन्हें स्थापित किया है: sudo apt-get gcc-multilib libc6-i386 lib6-dev-i386 स्थापित करें? – ChristopheD

+0

उन सभी संकुल पहले से ही स्थापित हैं। ऐसा लगता है कि llvm-gcc 64-बिट आउटपुट का उत्पादन करने के लिए हार्डकोड किया गया है। –

4

आप आदेशों की इस श्रृंखला की कोशिश कर सकते हैं और देखो अगर यह काम करता है? सैद्धांतिक रूप से यदि आप -m32 विकल्प के साथ LLVM-जीसीसी प्रदान की इन चरणों का LLVM-जीसीसी द्वारा लिया जाना चाहिए, लेकिन शायद इसे सही ढंग से काम नहीं कर रहा है, तो के सभी चरणों स्पष्ट करते हैं:

llvm-gcc -m32 -emit-llvm test.c -c -o test.bc 
llc test.bc -march=x86 -o test.S 
gcc test.S -m32 -o test 

इस के अनुक्रम होना चाहिए कदम (या कुछ समान) जो llvm-gcc स्पष्ट रूप से निष्पादित करता है, लेकिन ऐसा लगता है कि यह किसी कारण से 64 बिट असेंबली उत्सर्जित कर रहा है, फिर इसे 32 बिट के लिए इकट्ठा करने और लिंक करने का प्रयास कर रहा है।

+0

यह लगभग वही करता है जो मैं चाहता हूं, लेकिन काफी नहीं। यद्यपि यह वास्तव में 32-बिट बाइनरी का उत्पादन करता है, मेरा परीक्षण कार्यक्रम कहता है कि आकार (शून्य *) 8 है, जो बहुत चिंतित है। –

+0

ओह, आपको भी lvm gcc पर m32 पास करना होगा। आदेशों का नया सेट आज़माएं। – Falaina

+1

हालांकि यह समस्या है। llvm-gcc अनदेखा कर रहा है -m32। –

1

मुझे एक ही समस्या थी, llvm-gcc झंडे को अनदेखा करता है, एकमात्र समाधान जो काम करता था वह llvm-gcc से clang तक स्विच करना था जो -32 का सम्मान करता है। वह या llvm-gcc काम के लिए 32 बिट ऑपरेटिंग सिस्टम पर स्विच करें।

+0

हम्म के आधार पर कुछ 64 बिट फ़ंक्शन नहीं मिलने के लिए लाइब्रेरी के बारे में शिकायत करेगा, मैं कल क्लैंग का प्रयास करूंगा। –

+0

मैंने अत्याधुनिक क्लैंग का उपयोग नहीं किया, या कम से कम नहीं सोचा कि मैंने ऐसा किया है क्योंकि मुझे इसके साथ समस्याएं थीं, मैं जो भी रिलीज_26 का उपयोग कर रहा हूं उसका उपयोग कर रहा हूं। svn सह http://llvm.org/svn/llvm-project/llvm/branches/release_26/ llvm सीडी llvm सीडी उपकरण svn सह http: // llvm।संगठन/एसवीएन/एलएलएमएम-प्रोजेक्ट/सीएफ/शाखाएं/रिलीज_26/क्लैंग मैं मूल रूप से यहां शुरू हुआ: http://clang.llvm.org/get_started.html –

+0

हम्म, आखिरी टिप्पणी में फॉर्मेटिंग को रोक दिया गया है, क्षमा करें –

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

  • कोई संबंधित समस्या नहीं^_^