如何在无编译器的Windows设备上运行基于GLFW等库开发的C++程序
无编译器Windows环境部署C++图形程序方案
1. 优先选择Linux交叉编译生成Windows可执行文件
你不需要切换到Windows系统就能直接生成可用的exe文件:
- 首先安装MinGW-w64交叉编译工具链,Debian/Ubuntu系发行版直接执行
apt install mingw-w64即可,其他发行版安装对应包即可 - 交叉编译所有依赖的静态库:GLFW、GLUT都需要用MinGW编译生成Windows平台的静态库版本,优先选静态编译依赖可大幅减少后续打包的文件数量,Dear ImGui是头文件-only库,直接把源码加入你的项目编译流程即可
- 编译你的项目时添加静态链接参数:在MinGW的g编译参数中加入
-static -static-libgcc -static-libstdc++,确保C/C运行时库也被静态打包进最终的exe文件,不需要额外携带运行时dll - 编译完成后即可得到后缀为
.exe的Windows可执行文件
2. 检查依赖完整性
编译完成后先确认没有额外的非系统依赖:
- 用
x86_64-w64-mingw32-objdump -x 你的程序.exe | grep "DLL Name"命令查看程序依赖的所有dll文件,确保除了Windows系统自带的kernel32.dll、user32.dll、gdi32.dll等系统库外,没有额外的第三方dll依赖 - 如果确实有必须动态链接的依赖,把对应的dll文件和exe放在同一个目录下即可
3. 打包所有文件发送
- 如果你的程序用到了外部资源(字体、图片、着色器、配置文件等),按照你代码中写的相对路径,把这些资源和exe放在同一级目录或者对应子目录下
- 把整个文件夹打包成zip压缩包发给朋友即可,对方解压后双击exe就能直接运行
- 如果你想要更方便的单文件体验,可以用NSIS工具把所有文件打包成单EXE安装包,对方双击安装后就能直接用
备选方案:Windows端编译
如果交叉编译遇到难以解决的依赖问题,可以找一台安装了编译器的Windows设备,用MinGW或者MSVC编译你的项目,同样选择静态链接,编译完成后按照上面的步骤打包即可,编译完成后建议先在无编译器的Windows虚拟机上测试运行,确认没问题再发送。
内容的提问来源于stack exchange,提问作者vaizq
相关产品推荐
相关产品推荐

