您选择的cpu不支持x86-64指令集

时间:2012-10-18 09:28:38

标签: c++ gcc ubuntu 64-bit wubi

我知道这个问题已经有一些答案,但我似乎无法理解为什么我会一直收到这个错误。

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

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

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

非常感谢

编辑:好的,在Codeblocks中的某个地方,我找到了针对“Pentium M”架构检查的选项。我已经取消选中它,现在我得到了几个错误,例如:

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

出于哪种原因,这应该只发生在Linux而不是Windows上?

1 个答案:

答案 0 :(得分:9)

基于此评论:

  

编辑:好的,在Codeblocks中的某个地方,我找到了针对“Pentium M”架构检查的选项。我已经取消选中它,现在我得到了几个错误,例如:

这就是编译问题的原因 - “Pentium M”是一个32位架构。 CodeBlocks下的gcc默认情况下会在Windows 上生成32位代码

错误:

  

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

是因为linux x64上的64位模型是LP64,其中sizeof(long) == sizeof(pointer) == 64bitssizeof(int) == 32bits并且您试图推送指针(void *)( 64位)到int(32位),导致指针信息丢失。

如果出现类似的编译错误,则代码很可能不是64位清除。

  

出于哪种原因,这应该只发生在Linux而不是Windows上?

Linux on x64默认生成64位应用程序,您需要将-m32添加到程序的构建选项中,以使其生成32位代码(可能有一个CodeBlocks目标选项来执行此操作)