MinGW生成C可执行文件,运行报dll丢失

下使用g++.exe/gcc.exe编译出来的可执行文件,在运行时报libgcc_s_dw2-1.dll丢失的错:

无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。

这个问题的原因是因为编译器在默认的情况下使用的不是静态关联,所以在执行文件下没有找到该DLL就会导致这个报错。最简单的解决方法是将此DLL直接放入到可执行文件的同目录下即可,当然,还有可能会报:

无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。

这种情况下,只能再次把丢失的DLL拷贝到可执行文件的目录下,这样问题就能得到解决。

虽然上面的方法能够解决这个问题,但每次新项目之后都需要将这些文件放入到部署文件夹。如果对这种方式不太满意,你可以考虑在编译的时候加入:-static-libgcc -static-libstdc++

g++.exe source_files -o target_file -static-libgcc -static-libstdc++

这将直接告诉,使用静态链接来处理关联。编译之后,就不需要再次将DLL文件拷贝到可执行文件的目录中。

如果你是使用来编译,也可以在CMakeLists.txt中添加这两个参数:

project(projectName)
cmake_minimum_required(VERSION 2.8)
#......
### 添加下面这段代码
if(WIN32)
    set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++")
endif(WIN32)
### 添加结束
#.....
#其他代码

这样在编译的时候,就能自动添加这两个参数到编译器上。

Monday, December 30, 2013 | 其他技术 Unix & Linux 编程语言

文章评论

No comments posted yet.

发表评论

Please add 2 and 5 and type the answer here:

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。