【发布时间】:2014-04-06 00:11:53
【问题描述】:
计算机 A 运行 Windows 7 x64。计算机 B 运行 Windows 7 x86。我正在使用 Eclipse、Ant 和 MinGW-w64 在计算机 A 上编译文件。该文件在计算机 A 上运行良好,但在计算机 B 上出现以下错误:
此文件的版本与 Windows 的版本不兼容 你在跑。检查计算机的系统信息以查看 无论您需要 x86(32 位)还是 x64(64 位)版本的 程序,然后联系软件发行商。
程序是一个文件,main.cpp
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
return 0;
}
ant脚本如下:
<?xml version="1.0" encoding="UTF-8" ?>
<project name="winsock" default="build">
<taskdef resource="cpptasks.tasks">
<classpath>
<pathelement location="E:\_dev\windows\MinGW\msys\home\windoze\projects\Winplay\lib\cpptasks.jar"/>
</classpath>
</taskdef>
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath>
<pathelement location="E:\_dev\windows\MinGW\msys\home\windoze\projects\Winplay\lib\ant-contrib.jar" />
</classpath>
</taskdef>
<target name="build">
<mkdir dir="build" />
<mkdir dir="build/obj" />
<cc name="g++" objdir="build/obj" debug="${debug}">
<fileset dir="src" includes="*.cpp" />
<compiler name="g++">
<compilerarg value="-std=c++11" />
</compiler>
</cc>
<condition property="debugoption" value="-g -O0" else="-O2">
<isset property="debug" />
</condition>
<fileset dir="build/obj" id="objects" >
<include name="*.o" />
</fileset>
<pathconvert pathsep=" " property="objectslinker" refid="objects" />
<!-- Due to a bug in GppLinker.java in cpptasks.jar, we must exec g++ because GppLinker erroneously uses gcc, which breaks exception handling. -->
<exec command="g++ -std=c++11 -mwindows ${debugoption} -o build/winplay ${objectslinker}" failonerror="true" />
</target>
<target name="clean">
<delete dir="build" />
</target>
</project>
为什么 .exe 可以在我的系统上运行,但不能在具有相同 Windows 的系统上运行?我是否需要静态链接到 MinGW 使用的 Windows 定义?
【问题讨论】:
-
您确定计算机 B 运行的是 64 位 Windows7,而不是 32 位?
-
我编辑了我的帖子。实际上,计算机 B 正在运行 32 位窗口。如何编译 32 位可执行文件?
-
您是否在 64 位架构上运行两台计算机?
-
x64 不能在 x86 上运行,但 x86 可以在两者上运行。