我知道这个问题已经有一些答案了,但是我似乎无法理解为什么我一直收到这个错误。
所以这是解释:
我有安装Windows 7 x64的64位计算机。我在Windows上的GCC(代码块)下编译我的代码,没有任何问题。然后,我决定我的应用程序必须是可移植的,并决定在Linux上的GCC下对其进行编译。在我的另一台32位计算机上,代码正在编译,没有任何问题。但是,在我的64位计算机上,我决定将Ubuntu安装为Wubi。当然我也安装了Wubi x64版本。
我在Wubi下成功安装了Ubuntu,我安装了所有必需的东西,但是当我尝试编译我的项目时,第一行出现错误“您选择的cpu不支持x86-64指令集”。好的,考虑到我已经在64位计算机上的Windows 7 x64上安装了Wubi x64,这对我来说听起来完全没有意义。那么,为什么我会得到一条错误消息,说我的CPU不支持x86-64指令集?
仅仅是因为我已经安装了WUBI而不是以常规方式在根目录下安装Ubuntu,这是否仅仅是因为?我真的似乎不明白这件事。
非常感谢你
编辑:好的,在代码块的某个地方,我找到了已针对“Pentium M”体系结构进行检查的选项。我没有检查它,现在我得到了一些错误,例如:
错误:从void *转换为int会失去精度。
出于什么原因,这应该仅在Linux而不是Windows上发生?
最佳答案
基于此评论:
这就是编译问题的原因-“奔腾M”是32位体系结构。默认情况下,CodeBlocks下的gcc将在Windows上生成32位代码
错误:
原因是因为Linux x64上64位的模型是LP64
,其中sizeof(long) == sizeof(pointer) == 64bits
和sizeof(int) == 32bits
,并且您试图将指针(void *
)(64bits)推入int
(32bits)中,这会导致指针信息丢失。
遇到这样的编译错误,很可能该代码不是64位干净的。
Linux在x64上默认会生成64位应用程序,您需要在程序的构建选项中添加-m32
才能使其生成32位代码(可能有一个CodeBlocks目标选项可以执行此操作)
关于c++ - 您选择的CPU不支持x86-64指令集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12951385/