2012-10-18 65 views
1

我知道这个问题已经有几个答案,但我似乎无法理解为什么我一直收到这个错误。你选择的cpu不支持x86-64指令集

所以这里的解释: 我有64位机器,其中我安装了Windows 7 x64。我正在编译我的代码在Windows下的GCC(CodeBlocks)下,没有任何问题。然后我决定我的应用程序必须是可移植的,并且我决定在Linux下的GCC下进行编译。在我的其他32位机器中,代码编译没有任何问题。但是,在我的64位机器上,我决定将Ubuntu安装为五笔。当然,我也安装了Wubi x64版本。

我在Wubi下成功安装了Ubuntu,我安装了所有必需的东西,但是当我尝试编译我的项目时,我在第一行发现错误'您选择的CPU不支持x86-64指令集'。好吧,这听起来完全没有意义,考虑到我在64位机器上安装了Windows 7 x64上的Wubi x64。那么为什么我会得到一个错误,说我的CPU不支持x86-64指令集?

难道是因为我已经安装了WUBI,而不是以正常的方式在root上安装Ubuntu?我似乎无法得到这个东西。

非常感谢您

编辑:好的,某处代码块,我发现这是检查“奔腾M”架构的选项。我没有选中它,现在我得到几个erros,如:

错误:从void *转换为int失去精度。

出于什么原因,这种情况应该发生在Linux上而不是在Windows上?基于此评论

+1

这个答案没有帮助? http://stackoverflow.com/a/11079910/777186 – jogojapan

+0

实际连接到您提到的其他问题可能会很有用,也许可以解释您尝试过的那些建议的方法。 – jogojapan

+2

这不是关于你的CPU,而是关于你正在编译你的应用程序的CPU。 – themel

回答

7

EDIT: Ok, somewhere in Codeblocks I found the option that was checked for "Pentium M" architectures. I've unchecked it and now I get several erros such as:

这是为编制问题的原因 - “奔腾M”是32位架构。代码块下GCC将默认产生在Windows 32位代码

错误:

error: cast from void* to int loses precision.

引起,因为64位模型在Linux的x64是LP64,其中sizeof(long) == sizeof(pointer) == 64bitssizeof(int) == 32bits和你想将指针(void *)(64位)推入int(32位),这会导致指针信息丢失。

这样的编译错误很可能是代码不是64位清理。

For which reason should this happen ONLY on Linux and not on Windows?

的Linux x64上默认为生产64位应用程序,你需要添加-m32到构建选项的计划,使之产生32位代码(有可能是一个代码块的目标选项来做到这一点)

+0

清楚明确的答案。非常感谢你! – filipehd

+0

无论如何,有没有人知道如何在64bit ubuntu上安装GCC的32位开发套件? – filipehd

+0

来自我们的朋友在unix.stackexchange.com - http://unix.stackexchange.com/questions/12801/building-32-bit-on-a-64-bit-system – Petesh