简介
我有一个基于CMake的C++项目。到目前为止,我通过CLion构建和运行该项目。在我尝试直接运行. exe文件(而不是通过CLion)之前,一切都运行良好。
问题
当我导航到cmake build目录以便通过可执行文件启动我的程序时,它失败了,并在弹出窗口中显示以下消息:无法继续执行代码,因为找不到libgcc_s so-1.dll。重新安装程序可能会解决此问题。
我有以下问题
- 如果我正确地解释了错误信息,那么这个dll在我的计算机上丢失了。所以我问自己,为什么当我通过开发环境(CLion)启动程序时,我的程序仍然工作,尽管错误信息明确指出源代码需要这个dll?
- 出现这个错误是因为我的应用程序/源代码的错误,还是因为我的计算机当前的状态?如果是前者,我怎样才能防止其他用户出现这个错误?
- 修复此错误的最佳方法是什么?很明显,我需要下载此dll,但放置它的最佳位置是哪里(在Windows上使用哪个目录和环境变量)?
- 哪个来源是值得信赖的下载此dll?我不想下载任何恶意软件下这个dll名称。
- 可选:这是什么样的库?它提供什么功能?
其他信息
我使用CMake作为构建工具,CLion作为IDE,MinGW作为编译器。
到目前为止我做了什么?
- 我通过IDE确保它仍然工作。
- 我发现这个dll在MinGW安装文件夹中不存在。
- 我在网上搜索了更多的信息。不幸的是,只有一些我不知道的页面只提供这个dll的下载。这并不能让我满意。
3条答案
按热度按时间enxuqcxy1#
我找到了问题的原因:我的机器上安装了两个MingGW。一个是CLion附带的安装,另一个是单独的安装。后者没有所需的DLL。然而,CLion使用自己的安装,而后者拥有DLL。因此,解决方案是删除单独的安装,并在PATH环境变量中包含CLion安装的bin/目录的路径。
u5rb5r592#
我也遇到了同样的问题,对我来说,问题是我从我为自己编写的批处理脚本运行
windeployqt.exe
,这样我就不必每次都打开MinGW控制台并导航到我的部署目录。当我从安装了Qt的专用MinGW64控制台运行
windeployqt.exe
时,它按预期工作。添加了以前丢失的dll,我可以在另一台没有安装Qt的Windows PC上运行我的应用程序。des4xlb03#
当使用SEH作为例外模型时(与Dwarf或SJLJ相反),此文件是MinGW-w 64的一部分。您需要将
.exe
文件所依赖的.dll
文件分发到与.exe
文件相同的文件夹中。如果您没有这个文件,那么您可能使用了不同版本的GCC/MinGW(-w 64)编译的库,我建议使用相同的编译器来构建所有库,以确保稳定的二进制文件。
像Dependency Walker这样的工具可以帮助您确定
.exe
文件依赖于哪些.dll
文件。或者使用https://github.com/brechtsanders/pedeps中的命令行工具
copypedeps -r
复制.exe
文件及其依赖项。