MinGW下使用g++.exe/gcc.exe编译出来的可执行文件,在运行时报libgcc_s_dw2-1.dll丢失的错:
无法启动此程序,因为计算机中丢失libgcc_s_dw2-1.dll。尝试重新安装该程序已解决此问题。
这个问题的原因是因为gcc编译器在默认的情况下使用的不是静态关联,所以在执行文件下没有找到该DLL就会导致这个报错。最简单的解决方法是将此DLL直接放入到可执行文件的同目录下即可,当然,还有可能会报:
无法启动此程序,因为计算机中丢失libstdc++-6.dll。尝试重新安装该程序已解决此问题。
这种情况下,只能再次把丢失的DLL拷贝到可执行文件的目录下,这样问题就能得到解决。
虽然上面的方法能够解决这个问题,但每次新项目之后都需要将这些文件放入到部署文件夹。如果对这种方式不太满意,你可以考虑在编译的时候加入:-static-libgcc -static-libstdc++
g++.exe source_files -o target_file -static-libgcc -static-libstdc++
这将直接告诉编译器,使用静态链接来处理关联。编译之后,就不需要再次将DLL文件拷贝到可执行文件的目录中。
如果你是使用CMake来编译,也可以在CMakeLists.txt中添加这两个参数:
project(projectName)
cmake_minimum_required(VERSION 2.8)
#......
### 添加下面这段代码
if(WIN32)
set(CMAKE_CXX_FLAGS "-static-libgcc -static-libstdc++")
endif(WIN32)
### 添加结束
#.....
#其他代码
这样在编译的时候,就能自动添加这两个参数到编译器上。