c++ 在Windows上缺少启动.exe的libgcc_s_seh-1.dll

kmpatx3s  于 2023-03-05  发布在  Windows
关注(0)|答案(3)|浏览(2487)

简介

我有一个基于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的下载。这并不能让我满意。
enxuqcxy

enxuqcxy1#

我找到了问题的原因:我的机器上安装了两个MingGW。一个是CLion附带的安装,另一个是单独的安装。后者没有所需的DLL。然而,CLion使用自己的安装,而后者拥有DLL。因此,解决方案是删除单独的安装,并在PATH环境变量中包含CLion安装的bin/目录的路径。

u5rb5r59

u5rb5r592#

我也遇到了同样的问题,对我来说,问题是我从我为自己编写的批处理脚本运行windeployqt.exe,这样我就不必每次都打开MinGW控制台并导航到我的部署目录。
当我从安装了Qt的专用MinGW64控制台运行windeployqt.exe时,它按预期工作。添加了以前丢失的dll,我可以在另一台没有安装Qt的Windows PC上运行我的应用程序。

des4xlb0

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文件及其依赖项。

相关问题