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

所以这是解释:
我有安装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) == 64bitssizeof(int) == 32bits,并且您试图将指针(void *)(64bits)推入int(32bits)中,这会导致指针信息丢失。

遇到这样的编译错误,很可能该代码不是64位干净的。



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

关于c++ - 您选择的CPU不支持x86-64指令集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12951385/

10-13 00:06