2012-01-14 119 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)来解决此问题。
我已经尝试过几乎所有的论坛,这个解决方案的作品。

如果有人需要帮助,请让我知道。 :)