如何使用mingw-w64编译和链接32位Windows可执行文件

我使用Ubuntu 13.04并使用apt-get install mingw-w64 。 我可以使用下面的命令编译并链接我的程序的一个可用的64位版本:

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

其中生成一个64位的app.exe文件。

我用什么二进制或命令行标志来生成一个32位版本的app.exe?

Solutions Collecting From Web of "如何使用mingw-w64编译和链接32位Windows可执行文件"

这取决于你当前使用的工具链的变体。 DWARFSEH变体(从GCC 4.8.0开始)都只是单一目标。 您可以通过检查其分发的目录结构自己查看它,即它们只包含具有64位和32位寻址的库,但不包含两者。 另一方面,普通的SJLJ分布确实是双目标,为了构建32位目标,只需提供-m32标志。 如果这不起作用,那就用i686-w64-mingw32-g++构建。

奖金


顺便说一下,实现每个GCC异常模型的三个相应的动态链接库 (DLL)

  1. libgcc_s_dw2-1.dll (DWARF);
  2. libgcc_s_seh-1.dll (SEH);
  3. libgcc_s_sjlj-1.dll (SJLJ)。

因此,要找出当前MinGW-w64发行版提供的异常模型,您可以选择

  1. 检查MinGW-w64安装目录和文件结构,希望找到其中一个DLL(通常在bin ); 要么
  2. 构建一些涉及异常处理的真实或测试C ++代码,强制与其中一个DLL进行链接,然后查看构建的目标依赖于哪个DLL(例如,可以在Windows上使用Dependency Walker ); 要么
  3. 采取蛮力的方法,并编译一些测试代码,以汇编(而不是机器代码),并寻找像___gxx_personality_v* (DWARF), ___gxx_personality_seh* (SEH), ___gxx_personality_sj* (SJLJ)的引用的存在; 请参阅获取当前的GCC异常模型 。