程序无法启动,因为缺少libgcc_s_dw2-1.dll

时间:2011-01-15 23:17:36

标签: c++ windows mingw

我使用Code :: Blocks在C ++中创建了一个简单的程序。

如果我从Code :: Blocks运行它,它可以正常工作;但如果我通过双击可执行文件来运行它,会弹出一个窗口,显示以下消息:

  

程序无法启动,因为您的计算机缺少libgcc_s_dw2-1.dll   尝试重新安装该程序以解决此问题。

那么,问题是什么?我该怎么做才能解决它?

17 个答案:

答案 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"]

[GNU gcc link options]

后一个讨论包括-static-libgcc-static-libstdc++个链接器选项。

答案 1 :(得分:36)

在Eclipse中,您将在项目属性&gt;下找到它。 C / C ++ Build&gt;设置&gt; MinGW C ++ Linker&gt;其它

您必须将其添加到顶部的“链接器标志”;无处。 然后重建。

Eclipse properties screenshot

我发现即使经过优化,静态链接也可以将大小扩展到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-dl​​l.tar.lzma这样的文件。解压缩并进入bin文件夹,在那里你可以找到你的libgcc_s_dw2-1.dll和其他dll。将您需要的内容复制并粘贴到bin目录中。

答案 11 :(得分:1)

将“-static”添加到其他链接器选项可解决此问题。在我在另一个系统上测试后,我遇到了同样的问题,但不是我自己的,所以即使你没有在开发系统上注意到这一点,如果你是静态链接,你应该检查你是否有这个。

另一个注意事项是,将DLL复制到与可执行文件相同的文件夹中并不是解决方案,因为它违背了静态链接的想法。

另一种选择是使用MinGW的TDM版本来解决这个问题。

答案 12 :(得分:1)

在CodeBlocks中,您可以转到设置...编译器...。 然后选择 1)蓝色框中的两个项目 要么 2)绿色框中的一项

codeblocks compiler settings

答案 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。除其他外,清理将删除 binobj 文件夹中的文件,以便在构建时在 binobj 中创建一组全新的文件文件夹。