Подтвердить что ты не робот

Как скомпилировать и связать 32-разрядный исполняемый файл Windows с помощью mingw-w64

Я использую Ubuntu 13.04 и установил mingw-w64, используя apt-get install mingw-w64. Я могу скомпилировать и связать рабочую 64-битную версию моей программы со следующей командой:

x86_64-w64-mingw32-g++ code.cpp -o app.exe

Создает 64-разрядный файл app.exe.

Какие бины двоичной или командной строки я использую для создания 32-разрядной версии app.exe?

4b9b3361

Ответ 1

Это зависит от того, какой вариант инструментальной цепочки вы используете. Оба варианта DWARF и SEH (которые начинаются с GCC 4.8.0) являются только однонаправленными. Вы можете убедиться в этом, проверив структуру каталогов своих дистрибутивов, т.е. Они содержат только библиотеки с 64- и 32-разрядной адресацией, но не оба. С другой стороны, простые старые дистрибутивы SJLJ действительно являются двойными целями, и для того, чтобы построить 32-битную цель, просто поставьте флаг -m32. Если это не работает, просто создайте с помощью i686-w64-mingw32-g++.

BONUS


Кстати, три соответствующие библиотеки динамической компоновки (DLL), реализующие каждую модель исключения GCC,

  • libgcc_s_dw2-1.dll (DWARF);
  • libgcc_s_seh-1.dll (SEH);
  • libgcc_s_sjlj-1.dll (SJLJ).

Следовательно, чтобы выяснить, какая именно модель исключения предоставляет ваш текущий дистрибутив MinGW-w64, вы можете либо

  • проверить каталог и файловую структуру установки MinGW-w64 в надежде найти одну из этих DLL (обычно в bin); или
  • создайте какой-нибудь реальный или тестовый код на С++, включающий обработку исключений, чтобы связать связь с одной из этих DLL, а затем увидеть, на какой из этих DLL зависит встроенная цель (например, можно увидеть с помощью Dependency Walker в Windows); или
  • применяйте подход грубой силы и скомпилируйте некоторый тестовый код для сборки (вместо машинного кода) и найдите наличие таких ссылок, как ___gxx_personality_v* (DWARF), ___gxx_personality_seh* (SEH), ___gxx_personality_sj* (SJLJ); см. Получение текущей модели исключения GCC.