首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mingw-w64编译和链接32位Windows可执行文件

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

Stack Overflow用户
提问于 2013-10-30 18:01:57
回答 1查看 39K关注 0票数 34

我使用的是Ubuntu13.04,使用apt-get install mingw-w64安装了mingw-w64。我可以用以下命令编译和链接一个工作的64位版本的程序:

代码语言:javascript
复制
x86_64-w64-mingw32-g++ code.cpp -o app.exe

生成64位app.exe文件。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 15:01:26

这取决于您当前使用的工具链的哪个变体。侏儒和SEH变体(从GCC 4.8.0开始)都只是单一目标。您可以通过检查它们发行版的目录结构来查看它,即它们只包含64位或32位寻址的库,而不是两者都包含的库。另一方面,普通的旧SJLJ发行版确实是双重目标,为了构建32位目标,只需提供-m32标志。如果这不起作用,那么就用i686-w64-mingw32-g++构建吧。

奖金

另外,实现每个GCC异常模型的三个相应的动态链接库(DLLs)是

  1. 矮化( libgcc_s_dw2-1.dll );
  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(例如,在依赖沃克上可以看到);或
  3. 采用蛮力方法并编译一些测试代码到程序集(而不是机器代码),并查找___gxx_personality_v* (侏儒)、___gxx_personality_seh* (SEH)、___gxx_personality_sj* (SJLJ)等引用;参见当前GCC异常模型的建立
票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19690504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档