程序无法启动,因为libgcc_s_dw2-1.dll文件丢失

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

如果我从Code :: Blocks运行它,它正常工作; 但如果我通过双击可执行文件运行它,一个窗口popup与此消息:

程序无法启动,因为您的计算机缺lesslibgcc_s_dw2-1.dll。
尝试重新安装程序来解决这个问题。

那么,问题是什么? 我需要做些什么来解决这个问题?

我相信这是一个MinGW / gcc编译器问题,而不是Microsoft Visual Studio安装程序。

libgcc_s_dw2-1.dll应该在编译器的bin目录下。 您可以将此目录添加到您的PATH环境variables以进行运行时链接,或者通过向编译器标志添加“-static-libgcc -static-libstdc ++”来避免此问题。

如果你打算分发可执行文件,后者可能是最有意义的。 如果你只打算在自己的机器上运行它,改变PATH环境variables是一个有吸引力的select(保持可执行文件的大小)。

更新:

根据Greg Treleaven的反馈(见下面的评论),我将链接添加到:

[Code :: Blocks“项目构build选项”的屏幕截图]

[GNU gcc链接选项]

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

在Eclipse中,您可以在项目属性> C / C ++ Build> Settings> MinGW C ++ Linker> Misc下find它

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

Eclipse属性的截图

我已经发现,即使进行了优化,将这些链接静态地扩展到了1,400kb。 与只是复制共享的DLL相比,它大了277kb。 在UPXing之后,它也大了388kb。 非常输/输在这里。 只要包含DLL,最终用户可以决定是否删除它们,如果他们有他们安装在其他地方。

Code :: Blocks:在settings-> compiler-> Linker settings-> Other linker选项中添加'-static'。

复制“libgcc_s_dw2-1.dll”为make.exe。 (如果您使用Msys,请将其复制到\ msys \ bin)确保make.exe的path在env中设置。 PATH(如果make.exe在一个文件夹“bin”中,最有可能的是,你有msys,它是\ msys \ bin)编译,rund,debugging等。

find你的电脑上的DLL,并将其复制到您的可执行文件所在的目录中。

另见。 它解决了我的问题。

顺便说一句,这是肯定的compiler标志? 也许linker是更适合的术语呢?

将该path添加到PATH环境variables中。

你不能把它放在system32中,或者像你对别人的dll文件做的那样,所以你试图运行的每个程序都不会在你的机器上出现这个问题?

我只需要在哪里放置它的path。

每次我运行一个我刚刚build立的程序时,把它放在目录中是有点麻烦的…

编辑:我find了解决办法:

将libgcc_s_dw2-1.dll解压缩到您计算机上的某个位置。 我们build议您将其解压缩到请求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,则还应该将libgcc_s_dw2-1.dll放在C:\ Windows \ SysWOW64 \

确保覆盖任何现有的文件(但是制作原始文件的备份副本)。 重新启动您的电脑。

如果问题仍然存在,请尝试以下操作:

  • 打开Windows开始菜单并select“运行…”。
  • 键入CMD并按Enter键(或者如果您使用Windows ME,请键入COMMAND))。
  • 键入regsvr32 libgcc_s_dw2-1.dll,然后按Enter键。

只要进入设置>>编译器和debugging器,然后点击链接器设置选项卡,然后转到“其他链接器选项”编辑控件,并粘贴:“-static-libgcc -static-libstdc ++”,没有编译器标志选项在Code :: Blocks的Compiler Flags选项中,这是解决这个问题的方法,我也来这里寻找一个解决scheme,并且发布关于“-static-libgcc -static-libstdc ++”的那个人给出了正确的想法,我有点意外地发现了其余的,但它的工作,该文件现在可以从外部Code :: Blocks,点击从桌面上正常工作。

转到MinGW http sourceforge.net树。 在Home / MinGW / Base / gcc / Version4下(或其他版本的使用)/ gcc-4(version)/你会发现gcc-core-4.8.1-4-mingw32-dl​​l.tar.lzma 。 提取它,并进入bin文件夹,你会发现libgcc_s_dw2-1.dll和其他的DLL。 复制并粘贴到你的bin目录中。

我能够通过使用“gcc”而不是“g ++”来解决这个问题。 我知道这不是大多数人的select,但我想我会提到它:)