2009-09-24 187 views
14

我有一個64位版本的llvm-gcc,但我希望能夠構建32位和64位二進制文​​件。有沒有這個標誌?我試圖通過-m32(這在常規的gcc作品),但我得到一個錯誤信息是這樣的:使用64位構建32位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,它是Ubuntu 9.04 x86-64附帶的版本。


編輯:這裏是輸出的相關部分,當我運行LLVM-GCC與-v標誌:

[[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實際使用的完整參數列表嗎? – 2009-09-24 22:20:02

+0

以詳細輸出更新。 – 2009-09-25 18:18:52

回答

5

嘗試設置:

export CFLAGS="-m32" 
export LDFLAGS="-m32" 

編譯前...

+0

llvm-gcc忽略了這兩者並構建了一個64位版本。 – 2009-09-24 22:14:35

+0

你安裝了這些:sudo apt-get install gcc-multilib libc6-i386 lib6-dev-i386? – ChristopheD 2009-09-24 22:26:56

+0

所有這些軟件包已安裝。這就像llvm-gcc被硬編碼以產生64位輸出一樣。 – 2009-09-25 18:15:05

4

你能嘗試這一系列命令,看看它是否起作用?從理論上講,如果你用-m32選項提供LLVM-GCC應該由LLVM-GCC採取這些步驟,但也許它不能正常工作,因此,讓所有的步驟明確:

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位的二進制文件,但我的測試程序認爲sizeof(void *)是8,這非常令人擔憂。 – 2009-09-25 18:18:18

+0

糟糕,您還必須將m32傳遞給llvm gcc。嘗試新的一組命令。 – Falaina 2009-10-01 01:28:19

+1

雖然這是問題。 llvm-gcc忽略-m32。 – 2009-10-01 01:41:15

1

我有同樣的問題,llvm-gcc忽略標誌,唯一的解決方案是從llvm-gcc切換到clang,它不尊重-m32。這或者切換到一個32位操作系統的llvm-gcc工作。

+0

嗯,明天我會試試clang。 – 2009-10-01 01:48:06

+0

我沒有使用最先進的叮噹聲,或者至少不認爲我做了,因爲我有問題,我一直在使用任何release_26代表。 SVN共同http://llvm.org/svn/llvm-project/llvm/branches/release_26/ LLVM CD LLVM CD工具 SVN共同的http:// LLVM。組織/ SVN/ 我基本上在這裏開始LLVM項目/ CFE /分支機構/ release_26 /鐺: http://clang.llvm.org/get_started.html – 2009-10-01 03:47:33

+0

嗯,formmatting在最後評論大清洗,對不起 – 2009-10-01 03:48:06