我知道这个问题已经有一些答案,但我似乎无法理解为什么我会一直收到这个错误。
所以这是解释: 我有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上?
答案 0 :(得分:9)
基于此评论:
编辑:好的,在Codeblocks中的某个地方,我找到了针对“Pentium M”架构检查的选项。我已经取消选中它,现在我得到了几个错误,例如:
这就是编译问题的原因 - “Pentium M”是一个32位架构。 CodeBlocks下的gcc默认情况下会在Windows 上生成32位代码
错误:
错误:从void *转换为int失去精度。
是因为linux x64上的64位模型是LP64
,其中sizeof(long) == sizeof(pointer) == 64bits
和sizeof(int) == 32bits
并且您试图推送指针(void *
)( 64位)到int
(32位),导致指针信息丢失。
如果出现类似的编译错误,则代码很可能不是64位清除。
出于哪种原因,这应该只发生在Linux而不是Windows上?
Linux on x64默认生成64位应用程序,您需要将-m32
添加到程序的构建选项中,以使其生成32位代码(可能有一个CodeBlocks目标选项来执行此操作)