MinGW产生exe,当在不同的系统上运行时会产生"not compatible with the version of Windows"



计算机 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;
}

蚂蚁脚本如下:

<?xml version="1.0" encoding="UTF-8" ?>
<project name="winsock" default="build">
    <taskdef resource="cpptasks.tasks">
    <classpath>
      <pathelement location="E:_devwindowsMinGWmsyshomewindozeprojectsWinplaylibcpptasks.jar"/>
    </classpath>
  </taskdef>
  <taskdef resource="net/sf/antcontrib/antlib.xml">
    <classpath>
      <pathelement location="E:_devwindowsMinGWmsyshomewindozeprojectsWinplaylibant-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使用的窗口定义?

您正在生成一个 64 位可执行文件,它与任何 32 位版本的 Windows 都不兼容(请注意,相反的情况并非如此,如果您生成了 32 位可执行文件,它将与 64 位 Windows 兼容......

要生成可执行文件的 32 位版本,请检查 eclipse 上的"项目选项"。您必须在 antfile 和项目选项中的某个位置-march=i686。Eclipse 的界面上可能有一个复选框/组合框......

相关内容

最新更新