簡體   English   中英

MinGW生成的exe,在其他系統上運行時會生成“與Windows版本不兼容”

[英]MinGW produces exe which when ran on a different system produces “not compatible with the version of Windows”

計算機A運行Windows 7 x64。 計算機B運行Windows 7 x86。 我正在使用Eclipse,Ant和MinGW-w64在計算機A上編譯文件。該文件在計算機A上運行良好,但是在計算機BI上卻出現以下錯誤:

此文件的版本與您正在運行的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:\_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定義的事情嗎?

您正在生成一個64位可執行文件,並且它與Windows的任何32位版本都不兼容(請注意,相反的說法不正確,如果生成了32位可執行文件,則它將與64位Windows兼容。 。)

要生成可執行文件的32位版本,請在eclipse上檢查“項目選項”。 您必須在antfile和項目選項的某處具有-march=i686 Eclipse的界面上可能有一個復選框/組合框...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM