在 Windows 上启动 .exe 时缺少 libgcc_s_seh-1.dll

问题描述 投票:0回答:4

简介

我有一个基于 CMake 的 C++ 项目。到目前为止,我通过 CLion 构建并运行该项目。一切正常,直到我尝试直接运行 .exe 文件(而不是通过 CLion)。

问题

当我导航到 cmake 构建目录以便通过可执行文件启动程序时,它失败并在弹出窗口中显示以下消息:无法继续代码执行,因为找不到 libgcc_s so-1.dll。重新安装程序可能会解决该问题。

我有以下问题

  • 如果我正确地解释了错误消息,则说明我的计算机上缺少此 dll。所以我问自己,为什么我的程序在通过开发环境(CLion)启动时仍然可以运行,尽管错误消息明确指出源代码需要这个dll?
  • 出现错误是我的应用程序/源代码的错误还是我计算机的当前状态的错误?如果是前者,如何防止其他用户出现此错误?
  • 修复此错误的最佳方法是什么?很明显我需要下载这个dll,但是最好把它放在哪里(Window上使用哪个目录和环境变量)?
  • 哪个来源下载这个 dll 是值得信赖的?我不想下载此 dll 名称下的任何恶意软件。
  • 可选:那是什么样的图书馆?它提供什么功能?

附加信息

我使用 CMake 作为构建工具,CLion 作为 IDE,MinGW 作为编译器。

到目前为止我做了什么?

  • 我确保它仍然可以通过 IDE 运行。
  • 我发现MinGW安装文件夹中不存在这个dll。
  • 我在网上搜索了更多信息。不幸的是,只有我不知道的页面只提供这个 dll 的下载。这并不能令我满意。
c++ dll cmake mingw clion
4个回答
1
投票

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


0
投票

当使用 SEH 作为异常模型(而不是 Dwarf 或 SJLJ)时,此文件是 MinGW-w64 的一部分。您需要将

.dll
文件所依赖的
.exe
文件分发到与
.exe
文件相同的文件夹中。

如果您没有该文件,那么您可能一直在使用使用不同版本的 GCC/MinGW(-w64) 编译的库。我建议使用相同的编译器构建所有内容,以确保稳定的二进制文件。

Dependency Walker 这样的工具可以帮助您找出您的

.dll
文件所依赖的
.exe
文件。

或者使用

https://github.com/brechtsanders/pedeps
中的命令行工具 copypedeps -r 复制
.exe
文件及其依赖项。


0
投票

我也有同样的问题。对我来说,问题是我从自己编写的批处理脚本中运行

windeployqt.exe
,这样我就不必每次都打开 MinGW 控制台并导航到我的部署目录。

当我从随 Qt 安装的专用 MinGW64 控制台运行

windeployqt.exe
时,它按预期工作。添加了之前丢失的 dll,我可以在另一台 Windows PC 上运行我的应用程序,而无需安装 Qt。


0
投票
如果您喜欢“静态 libstdc++”,那么它根本不需要 dll 存在即可运行它...

https://unix.stackexchange.com/questions/633316/how-to-statically-link-missing-libgcc-s-seh-1-dll-and-libstdc-6-dll-dlls-for-9/ 633321#633321

© www.soinside.com 2019 - 2024. All rights reserved.