如何分发不依赖MinGW与DLL的C++项目 生成独立可运行exe
VS Code编译C++生成无依赖独立exe的操作方法
核心逻辑很简单:要实现exe无需MinGW环境、无需额外DLL、拿到就能跑,只要做静态编译,把程序依赖的所有运行时库直接打包进exe内部,不采用运行时加载外部DLL的动态链接模式即可。
如果你用MinGW/g++编译器
- 编译时追加静态链接参数即可,不管是直接在终端敲命令,还是改
.vscode/tasks.json里的编译参数数组,都要带上这几个参数:-static -static-libgcc -static-libstdc++ - 完整编译命令示例:
g++ main.cpp utils.cpp -o my_app.exe -static -static-libgcc -static-libstdc++
小提示:如果编译时报WinMM相关链接错误,就在参数最后补
-lwinmm即可,没报错就不用加。
- 避坑:别用精简版MinGW,很多第三方打包的阉割版MinGW删掉了静态库文件,会报静态链接失败,换官方完整版MinGW-w64就没问题。
如果你用MSVC(微软VC++编译器)
- 调整运行时库编译选项即可:
- 发布版编译把默认的
/MD参数替换成/MT - 调试版编译把默认的
/MDd参数替换成/MTd
- 发布版编译把默认的
- 手动敲cl命令编译的示例:
cl main.cpp /EHsc /MT /Fe:my_app.exe - 这种方式编译出来的exe会静态绑定VC运行时,不需要用户额外安装VC++ Redistributable运行库。
有效性验证
编译完成后,把生成的exe单独拷贝到没有安装任何开发工具、没有装过VC运行库的同架构Windows设备上,双击能正常运行就说明符合要求。别在自己开发机上测,开发机本身装齐了各种依赖,动态编译的程序在本地也能跑,测不出缺DLL的问题。
内容的提问来源于stack exchange,提问作者kexiu
相关产品推荐
相关产品推荐

