程序无法找到libgcc_s_dw2-1.dll库文件

32
我正在使用Code::Blocks和MinGW 4.4编译器创建一个C++项目。如果我从它的目录中运行它,我会得到这个系统错误,但是如果我在Code::Blocks中运行它,则不会出现此错误。可能重复:The program can't start because libgcc_s_dw2-1.dll is missing
The program can't start because libgcc_s_dw2-1.dll is missing from your computer.  Try reinstalling the program to fix this problem.

这篇文章中,hardmath建议在编译器标志中添加-static-libgcc,以静态链接dll。然而,当我尝试这样做时,仍然出现错误。我通过将MinGW bin目录添加到计算机的Path变量中来解决问题,但我计划在互联网上分发我的程序。
这个问题只出现在更新到最新的G++编译器之后。为什么这个解决方案对其他人有效,而对我无效?

如果程序是C ++,则错误消息可能表明您已使用了C ++标准库中的某些内容。建议的另一个链接器选项是“-static-libstdc ++”。请检查是否也已添加了该选项。 - hardmath
@hardmath:我使用了<Windows.h>。 我认为这是来自C ++标准库。 当我尝试时,我正在使用“-static-libstdc ++”,但解决方案实际上只是像@rubenvb所说的“-static”。感谢你抽出时间来帮助我。 - Greg Treleaven
在 Code::Blocks 项目中如何添加链接器选项-static-libgcc - FreelanceConsultant
1个回答

53

链接命令行参数-static-libgcc应该可用。另一个您可以尝试的变体是普通的-static

如果您不想担心这个问题,并且仍然想重新分发您的二进制文件,只需从MinGW的bin目录复制相关的dll并将其放置在可执行文件旁边即可。这是常见做法并且效果如广告所说。


3
使用"-static"起作用了!非常感谢! :) - Greg Treleaven
6
请注意,使用“-static”将破坏跨DLL边界抛出异常的功能。 - rubenvb
4
@user286101所说的不是真实情况,请阅读官方FAQ上的“I use a proprietary compiler toolchain without any parts of GCC to compile my program, and link it with libstdc++.”这一节。 - rubenvb
2
我也遇到了libgcc_s_sjlj-1.dll的问题,使用-static-libgcc和-static-libstdc++解决了这个问题。 - Xavi Montero
@XaviMontero 我在CodeBlocks的“编译器设置”中添加了-static-libstdc++选项,但是出现了错误:“无法识别的命令行选项”。 - FreelanceConsultant
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接