2011-12-05 116 views

回答

1

是,只要使用-m32,並確保你擁有所有的32個工具和庫安裝(不是所有的x86-64發行版包括這些默認情況下,所以你可能需要apt-getyast或任何安裝這些)。

$ gcc -m32 -Wall foo.c -o foo 
+0

OK,感謝保羅R.如何反向的問題?在32位環境中構建64位應用程序?使用-m64對不對?在X86-64環境 – Daniel

+0

'-m64' WIL工作(但它是默認反正)。我不知道任何支持構建64位x86-64代碼的32位x86環境。 –

+0

好的。感謝保羅 - [R^_^ – Daniel

1

-m32標誌是所有你需要的,即。

gcc -m32 ... 

如果你得到一個錯誤,你可能需要32位資料庫,可能被命名爲類似glibc-devel.i686。這是Fedora上的軟件包名稱(使用yum),其他Linux發行版應該類似。

在Debian上& Ubuntu,你需要gcc-multilibia32-libs-dev包。

+0

如何Ubuntu的x86_64的包膜,是否有任何命令可用於安裝x86_32庫,如命令和apt-get安裝XXXX? – Daniel

+0

@Daniel:顯然有一個'g ++ - multilib'軟件包,請查看[此鏈接](https://help.ubuntu.com/community/InstallingCompilers#A32-bit_Builds_on_AMD64)瞭解更多詳情。 – AusCBloke

+1

我編輯了添加Debian和Ubuntu軟件包的答案 –

3

要彙編和64位multilib的GCC鏈接C源文件,你可以做到以下幾點:

gcc -m32 -c somefile.c 
gcc -m32 somefile.o -o myprog 

注意,所有32位庫需要安裝,並由multilib的編譯器可用。

ar應該工作,如果構建正確,不鼓勵直接撥打ld,因爲它的選項與GCC完全不同。只需與GCC聯繫。


至於爲什麼是「勸阻直接調用ld」:如果所有gcc鏈接,它會確切地知道系統/運行時庫的位置,也關於任何特定於平臺的選項就需要傳遞給ld。直接撥打ld時,需要注意所有這些。這裏對32位和64位的選項以及適當的庫目錄很重要。

+0

「不鼓勵直接調用ld」爲什麼有更多的解釋?提前致謝。 – Daniel

+0

@Daniel見編輯。 – rubenvb

+0

謝謝,我明白了。 – Daniel

1

是的,我需要-D_FILE_OFFSET_BITS = 64有時-m32使得一些麻煩,有時讓你不得不嘗試自己。

c++ -m32 -D_FILE_OFFSET_BITS=64 foo.c -o foo 

但是,這是相反的。在32位盒子上編譯64位程序。

+0

-D_FILE_OFFSET_BITS = 64?有些東西像宏定義:_FILE_OFFSET_BITS = 64。 – Daniel

+0

@丹尼爾:不,這是一個選項。但我確定了我的答案。我的問題與你的問題相反。 – Bytemain

+0

我明白了。 -m32解決這個問題。 MACRO似乎解決了一些程序問題,而不是cc/ld/ar問題,對嗎? – Daniel

相關問題