2012-01-14 118 views
24

我在我的x86 32位Linux系統上構建了GCC 4.7。 64位模式不GCC:對不起,未實現:64位模式未編譯

編譯,同時通過我的Linux發行版默認提供的編譯器可以交叉:與-m64標誌我得到

對不起,沒有實現當我嘗試交叉編譯用-m64編譯。

我必須傳遞給./configure以啓用GCC中的64位模式?這些都是我用來構建GCC 4.7的選項:

$ /usr/local/bin/g++ -v Using built-in specs. 
COLLECT_GCC=/usr/local/bin/g++ 
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 
Target: i686-pc-linux-gnu 
Configured with: ./configure --enable-multiarch --with-cloog=/usr/local/ --with-mpfr=/usr/local/ --with-ppl=/usr/local/ --verbose --enable-languages=c,c++ 
Thread model: posix gcc version 4.7.0 20120113 (experimental) (GCC) 

編輯:

--enable-multilib的和--enable-目標= i686的-PC-Linux的GNU,x86_64的-PC- linux-gnu

不改變這種情況。編譯器仍抱怨未編譯的65位模式:

$ g ++ -v使用內置規格。 COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 目標:i686-pc-linux-gnu配置:./configure --enable -multiarch --with-cloog =/usr/local/--with-mpfr =/usr/local/--with-ppl =/usr/local/--verbose --enable-languages = c,C++ --enable -multilib --enable-targets = x86-64-pc-linux-gnu線程模型:posix gcc version 4.7.0 20120113(experimental)(GCC)

$ g ++ -m64 c.cpp c.cpp:1:0:對不起,沒有實現:64位模式不 在

+0

'--enable-multiarch'建議Debian(或衍生產品),我記得,FSF的GCC在Debian的多元化系統中並不能很好地工作。您可能需要將Debian的補丁應用於FSF GCC快照。 – hvd 2012-01-14 09:47:20

+0

當然,它不會像這樣工作。 Multilib具有*後向*兼容性,而不是*前向*。要在32位機器上編譯64位代碼,你必須建立最小的SDK:binutils + libc [musl,uclibc,glibc,...] + gcc。 – 0andriy 2017-06-14 11:26:31

回答

9

編譯您將需要同時配置的binutils和gcc:

--enable-multilib 

大概:

--enable-targets=i686-pc-linux-gnu,x86_64-pc-linux-gnu 

支持multilib的(在-m64和/或-m32選項)。你還需要像glibc這樣的兩個版本來鏈接和運行生成的二進制文件。

+0

它無法與--enable-multilib和--enable-targets = i686-pc-linux-gnu,x86_64-pc-linux-gnu:$ g ++ -v 使用內置規格。 COLLECT_GCC = g ++ COLLECT_LTO_WRAPPER =/usr/local/libexec/gcc/i686-pc-linux-gnu/4.7.0/lto-wrapper 目標:i686-pc-linux-gnu 配置:./configure -/usr/local/--with-ppl =/usr/local/--verbose --enable-languages = c,使用multilib --enable-targets = i686-pc-linux-gnu,x86_64-pc-linux-gnu 線程模型:posix gcc版本4.7.0 20120113(experimental)(GCC) – Martin 2012-01-14 19:02:36

+2

您是否配置了binutils相同的選項? – rubenvb 2013-10-11 12:56:16

+0

這是錯誤的,你不能*轉發*兼容性。 – 0andriy 2017-06-14 11:27:05

19

這通常意味着您正在使用錯誤的(舊)編譯器。

新的編譯器同時支持-m32和-m64。您必須將PATH設置爲新編譯器(在Rtools的gcc,MinGW子目錄中)之前 Rtools中的任何舊編譯器。

嘗試將您的編譯器的二進制lib路徑更新爲64位版本。其他資源,如lib文件夾也應相應地改變。

+1

我不明白爲什麼有人給這個答案負面投票。這是我的情況下的實際正確答案。 – Anoyz 2013-10-22 10:03:56

+0

什麼是「你的編譯器的二進制lib路徑」? – 2017-04-02 21:26:25

1

剛剛解決了這個問題。 在環境變量中,刪除任何過時的C++包的條目。

以我爲例,我曾在蟒蛇的Windows 64位。在anaconda中,我執行了「conda install mingw libpython」。Mingw是用於C++編譯器的。但是我之前安裝了cygwin的C++編譯器,這些編譯器尚未更新。這是衝突的原因。 我通過簡單地刪除與這些C++包對應的環境變量(PATH)來解決此問題。
我已經嘗試過幾乎所有的論壇,這個解決方案的作品。

如果有人需要幫助,請讓我知道。 :)