我有一个基于 CMake 的 C++ 项目。到目前为止,我通过 CLion 构建并运行该项目。一切正常,直到我尝试直接运行 .exe 文件(而不是通过 CLion)。
当我导航到 cmake 构建目录以便通过可执行文件启动程序时,它失败并在弹出窗口中显示以下消息:无法继续代码执行,因为找不到 libgcc_s so-1.dll。重新安装程序可能会解决该问题。
我使用 CMake 作为构建工具,CLion 作为 IDE,MinGW 作为编译器。
我找到了问题的原因:我的机器上安装了两个 MingGW。一旦安装了CLion自带的和单独的一个。后者没有所需的dll。但是,CLion 使用自己的安装,而该安装又拥有 DLL。因此,解决方案是删除单独的安装,并将 CLion 安装的 bin/ 目录的路径包含在 PATH 环境变量中。
当使用 SEH 作为异常模型(而不是 Dwarf 或 SJLJ)时,此文件是 MinGW-w64 的一部分。您需要将
.dll
文件所依赖的 .exe
文件分发到与 .exe
文件相同的文件夹中。
如果您没有该文件,那么您可能一直在使用使用不同版本的 GCC/MinGW(-w64) 编译的库。我建议使用相同的编译器构建所有内容,以确保稳定的二进制文件。
像 Dependency Walker 这样的工具可以帮助您找出您的
.dll
文件所依赖的 .exe
文件。
或者使用
https://github.com/brechtsanders/pedeps中的命令行工具
copypedeps -r
复制 .exe
文件及其依赖项。
我也有同样的问题。对我来说,问题是我从自己编写的批处理脚本中运行
windeployqt.exe
,这样我就不必每次都打开 MinGW 控制台并导航到我的部署目录。
当我从随 Qt 安装的专用 MinGW64 控制台运行
windeployqt.exe
时,它按预期工作。添加了之前丢失的 dll,我可以在另一台 Windows PC 上运行我的应用程序,而无需安装 Qt。