我使用Code :: Blocks在C ++中创建了一个简单的程序。
如果我从Code :: Blocks运行它,它可以正常工作;但如果我通过双击可执行文件来运行它,会弹出一个窗口,显示以下消息:
程序无法启动,因为您的计算机缺少libgcc_s_dw2-1.dll 尝试重新安装该程序以解决此问题。
那么,问题是什么?我该怎么做才能解决它?
答案 0 :(得分:185)
我认为这是MinGW / gcc编译器问题,而不是Microsoft Visual Studio设置。
libgcc_s_dw2-1.dll
应该在编译器的bin目录中。您可以将此目录添加到PATH环境变量以进行运行时链接,也可以通过在编译器标志中添加“-static-libgcc -static-libstdc ++”来避免此问题。
如果您计划分发可执行文件,后者可能最有意义。如果您只打算在自己的机器上运行它,那么更改PATH环境变量是一个很有吸引力的选择(保持可执行文件的大小)。
<强>更新强>
根据Greg Treleaven的反馈(见下面的评论),我正在添加以下链接:
[Screenshot of Code::Blocks "Project build options"]
后一个讨论包括-static-libgcc
和-static-libstdc++
个链接器选项。
答案 1 :(得分:36)
在Eclipse中,您将在项目属性&gt;下找到它。 C / C ++ Build&gt;设置&gt; MinGW C ++ Linker&gt;其它
您必须将其添加到顶部的“链接器标志”;无处。 然后重建。
我发现即使经过优化,静态链接也可以将大小扩展到1,400kb。与仅复制共享DLL相比,它大277kb。在UPXing之后,它也增加了388kb。在这里非常输/输。只需包含DLL,因为最终用户可以决定是否删除它们,如果它们已经安装在别处。
答案 2 :(得分:9)
Code :: Blocks:在settings-&gt; compiler-&gt;链接器设置 - >其他链接器选项中添加'-static'。
答案 3 :(得分:5)
在您的PC上找到该DLL,并将其复制到您的可执行文件所在的目录中。
答案 4 :(得分:5)
将“libgcc_s_dw2-1.dll”复制到make.exe是。 (如果您使用的是Msys,请将其复制到\ msys \ bin) 确保在env中设置make.exe的路径。路径 (如果make.exe位于文件夹“bin”中,很可能,并且你有msys,它是\ msys \ bin) 编译,发送,调试等等。
答案 5 :(得分:4)
见also。它解决了我的问题。
顺便问一下,它肯定是compiler
旗吗?也许linker
是更合适的术语吗?
答案 6 :(得分:4)
你不能把它放在system32或类似的其他dll文件中,这样你试图运行的每个程序都不会在你的机器上出现这个问题吗?
我只需要把它放在哪里。
每次运行我刚刚构建的程序时,将它放在目录中都有点烦人......
编辑:我找到了解决方案:
将libgcc_s_dw2-1.dll解压缩到计算机上的某个位置。我们 建议你将它解压缩到程序目录中 请求libgcc_s_dw2-1.dll。
如果这不起作用,则必须将libgcc_s_dw2-1.dll解压缩到 你的系统目录。默认情况下,这是:
- C:\ Windows \ System(Windows 95/98 / Me)
- C:\ WINNT \ System32(Windows NT / 2000)
- C:\ Windows \ System32(Windows XP,Vista,7)
如果您使用的是64位版本的Windows,则还应该放置 C:\ Windows \ SysWOW64 \
中的libgcc_s_dw2-1.dll确保覆盖任何现有文件(但要制作备份副本 原始文件)。重新启动计算机。
如果问题仍然存在,请尝试以下操作:
- 打开Windows“开始”菜单,然后选择“运行...”。
- 键入CMD并按Enter键(或者,如果使用Windows ME,请键入COMMAND))。
- 键入regsvr32 libgcc_s_dw2-1.dll并按Enter键。
答案 7 :(得分:4)
只需转到设置&gt;&gt;编译器和调试器,然后单击链接器设置选项卡并转到“其他链接器选项”编辑控件并粘贴:“ - static-libgcc -static-libstdc ++”到它,有Code :: Blocks的Compiler Flags选项中没有编译器标志选项,这就是解决这个问题的方法,我来这里寻找解决方案,发布了关于“-static-libgcc -static-libstdc ++”的一个人给了正确的想法,我有点想到其余的意外,但它有效,文件现在可以从外部Code :: Blocks点击,从桌面工作。
答案 8 :(得分:4)
我能够通过使用&#34; gcc&#34;来克服这个问题。而不是&#34; g ++&#34;为我的编译器。我知道这对大多数人来说都不是一个选择,但我认为我将其作为解决方案选项提及:)
答案 9 :(得分:3)
将该dll的路径添加到PATH环境变量中。
答案 10 :(得分:3)
转到MinGW http sourceforge.net树。在Home / MinGW / Base / gcc / Version4(或使用的任何版本)/ gcc-4(版本)/你会找到像gcc-core-4.8.1-4-mingw32-dll.tar.lzma这样的文件。解压缩并进入bin文件夹,在那里你可以找到你的libgcc_s_dw2-1.dll和其他dll。将您需要的内容复制并粘贴到bin目录中。
答案 11 :(得分:1)
将“-static”添加到其他链接器选项可解决此问题。在我在另一个系统上测试后,我遇到了同样的问题,但不是我自己的,所以即使你没有在开发系统上注意到这一点,如果你是静态链接,你应该检查你是否有这个。
另一个注意事项是,将DLL复制到与可执行文件相同的文件夹中并不是解决方案,因为它违背了静态链接的想法。
另一种选择是使用MinGW的TDM版本来解决这个问题。
答案 12 :(得分:1)
答案 13 :(得分:0)
使用msys2我在调试环境中尝试执行项目的发布版本时遇到了同样的错误。我的问题的解决方案很明显:使用带有调试符号的可执行文件。
答案 14 :(得分:0)
在编译行中包含 -static-libgcc 即可解决问题
g++ my.cpp -o my.exe -static-libgcc
根据: @hardmath
例如,如果您使用的是MSYS2,也可以在个人资料 [.profile] 上创建别名。
alias g++="g++ -static-libgcc"
现在您的GCC命令也可以通过;-)
请记住重新启动终端
答案 15 :(得分:0)
如果您想知道在哪里可以下载共享库(尽管除非包含dll,否则这在您的客户端设备上将不起作用),以下是链接:https://de.osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-1-mingw32-dll-1.tar.xz/
答案 16 :(得分:0)
第 1 步:设置 -static-libgcc
和 -static-libstdc++
标志,或者在 -static
下设置 settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags
标志
第 2 步(在其他答案中没有强调): 在构建和运行之前清理您的构建。如果不清理,您可能会认为您正在重建项目,但最终会得到相同的 .exe。除其他外,清理将删除 bin
和 obj
文件夹中的文件,以便在构建时在 bin
和 obj
中创建一组全新的文件文件夹。