MinGW создает exe, который при запуске в другой системе выдает «несовместимый с версией Windows»

0

Компьютер A работает под управлением Windows 7 x64. Компьютер B работает под управлением Windows 7 x86. Я использую Eclipse, Ant и MinGW-w64 для компиляции файла на компьютере A. Файл отлично работает на компьютере A, но на компьютере BI появляется следующая ошибка:

Версия этого файла несовместима с версией Windows, в которой вы работаете. Проверьте информацию о своей компьютерной системе, чтобы узнать, нужна ли вам x86 (32-разрядная) или 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?

  • 1
    Вы уверены, что компьютер B работает под управлением 64-битной Windows7, а не 32-битной?
  • 0
    Я отредактировал свой пост. Действительно, компьютер B работает под управлением 32-битных окон. Как я могу скомпилировать 32-битный исполняемый файл?
Показать ещё 2 комментария
Теги:
ant
mingw

1 ответ

2
Лучший ответ

Вы генерируете 64-битный исполняемый файл и несовместимы с любой 32-разрядной версией Windows (обратите внимание, что противоположное неверно, если вы создали 32-битный исполняемый файл, он будет совместим с 64-битными Windows..)

Чтобы создать 32-разрядную версию исполняемого файла, проверьте "параметры проекта" на затмении. Вы должны будете иметь -march=i686 где-то в antfile и параметры проекта. Возможно, для Eclipse есть флажок /combobox для его интерфейса...

  • 1
    Могу ли я использовать -m32 ?
  • 0
    Я так думаю! (вы, конечно, можете попробовать ...)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню