程序无法启动,因为缺少 libgcc_s_dw2-1.dll
Posted
技术标签:
【中文标题】程序无法启动,因为缺少 libgcc_s_dw2-1.dll【英文标题】:The program can't start because libgcc_s_dw2-1.dll is missing 【发布时间】:2011-06-09 19:39:01 【问题描述】:我用 Code::Blocks 用 C++ 创建了一个简单的程序。
如果我从 Code::Blocks 运行它,它可以正常工作;但是如果我通过双击可执行文件来运行它,则会弹出一个窗口并显示以下消息:
程序无法启动,因为您的计算机中缺少 libgcc_s_dw2-1.dll。 尝试重新安装程序以解决此问题。
那么,问题出在哪里?我该怎么做才能修复它?
【问题讨论】:
【参考方案1】:第 1 步:设置-static-libgcc
和-static-libstdc++
标志,或者,在settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags
下设置-static
标志
第 2 步(在其他答案中没有强调): 清理在构建和运行之前您的构建。如果不清理,您可能会认为您正在重建项目,但最终会得到相同的 .exe。除其他外,清理将删除bin
和obj
文件夹中的文件,以便在您构建时,在bin
和obj
文件夹中创建一组全新的文件。
【讨论】:
【参考方案2】:如果您想知道在哪里可以下载共享库(尽管这在您的客户端设备上不起作用,除非您包含 dll)这里是链接:https://de.osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-1-mingw32-dll-1.tar.xz/
【讨论】:
终于!经过数十年搜索大量可笑的 MinGW 下载发布文件!多么节省,谢谢。【参考方案3】:在 CodeBlocks 中,您可以转到 Settings...Compiler... 并选择 1)蓝框中的两个项目 要么 2) 绿框中的一项
【讨论】:
【参考方案4】:在编译行加入-static-libgcc,问题解决
g++ my.cpp -o my.exe -static-libgcc
根据:@hardmath
如果您使用的是 MSYS2,也可以在您的个人资料 [ .profile ] 上创建一个别名
alias g++="g++ -static-libgcc"
现在你的 GCC 命令也通过了 ;-)
记得重启你的终端
【讨论】:
【参考方案5】:将“-static”添加到其他链接器选项可解决此问题。我只是在另一个系统上测试了这个问题后遇到了同样的问题,但不是我自己,所以即使你没有在你的开发系统上注意到这一点,如果你是静态链接,你应该检查你是否有这个设置。
另外注意,将 DLL 复制到与可执行文件相同的文件夹不是解决方案,因为它破坏了静态链接的想法。
另一种选择是使用 TDM 版本的 MinGW 来解决这个问题。
更新编辑:这可能无法解决所有人的问题。我最近发现的另一个原因是,当您使用由其他人编译的库时,在我的情况下,它是 SFML,它编译不正确,因此需要一个不存在的 DLL,因为它是用与我不同版本的 MinGW 编译的采用。我使用了一个 dwarf 构建,这使用了另一个,所以我在任何地方都没有 DLL,当然,我不想要它,因为它是一个静态构建。解决方案可能是找到另一个构建库,或者自己构建它。
【讨论】:
【参考方案6】:我能够通过在我的编译器中使用“gcc”而不是“g++”来克服这个问题。我知道这不是大多数人的选择,但我想我会提到它作为一种解决方法:)
【讨论】:
【参考方案7】:使用 msys2 我在调试环境中尝试执行我的项目的发布版本时遇到了同样的错误。我的问题的解决方案很明显:使用带有调试符号的可执行文件。
【讨论】:
【参考方案8】:见also。它解决了我的问题。
对了,绝对是compiler
标志吗?也许linker
是这里更合适的词?
【讨论】:
+1 表示正确的术语!是的,我对 gcc 链接选项的“链接”是一个暗示(对于静态库)。【参考方案9】:转到 MinGW http sourceforge.net 树。在 Home/MinGW/Base/gcc/Version4(或使用的任何版本)/gcc-4(version)/ 下,您会找到一个类似 gcc-core-4.8.1-4-mingw32-dll.tar.lzma 的文件.将其解压缩并进入 bin 文件夹,您将在其中找到您的 libgcc_s_dw2-1.dll 和其他 dll。将您需要的内容复制并粘贴到您的 bin 目录中。
【讨论】:
【参考方案10】:在 Eclipse 中,您会在项目属性 > C/C++ Build > Settings > MinGW C++ Linker > Misc 下找到它
您必须将其添加到顶部的“链接器标志”;无处。 然后重建。
我发现,即使经过优化,静态链接这些文件也会将大小扩大到 1,400kb。与仅复制共享 DLL 相比,它大了 277kb。在对所有内容进行 UPX 处理后,它也变大了 388kb。在这里非常输/输。只需包含 DLL,因为最终用户可以决定是否删除它们(如果它们已安装在其他位置)。
【讨论】:
有没有办法避免在每个新创建的项目中添加链接器标志? 致读者:请注意图片中添加的选项。这行得通。这有助于作为参考:orfe.princeton.edu/help/article-296【参考方案11】:只需转到设置>>编译器和调试器,然后单击链接器设置选项卡并转到“其他链接器选项”编辑控件并粘贴:“-static-libgcc -static-libstdc++”到它,没有Code::Blocks 的编译器标志选项中的编译器标志选项,所以这是解决该问题的方法,我来这里也是为了寻找解决方案,而发布关于“-static-libgcc -static-libstdc++”的人给出了正确的想法,我偶然发现了其余部分,但它起作用了,现在可以从 Code::Blocks 外部单击该文件,直接在桌面上工作。
【讨论】:
【参考方案12】:Code::Blocks:在设置->编译器->链接器设置->其他链接器选项中添加'-static'。
【讨论】:
这对我来说非常适合每个标题的“丢失”dll,它是如此快速和简单,我建议先尝试一下。 最佳解决方案! 这确实应该是公认的解决方案!快速简单。【参考方案13】:你不能把它放在 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。
【讨论】:
请不要在此处发布 cmets 作为答案。这不是堆栈溢出的工作方式。使用“u”代替“you”和“cos”代替“because”也不会走得太远。此处特别禁止聊天发言。【参考方案14】:将“libgcc_s_dw2-1.dll”复制到 make.exe 中。 (如果您使用的是 Msys,请将其复制到 \msys\bin) 确保在 env 中设置了 make.exe 的路径。小路 (如果 make.exe 很可能在文件夹“bin”中,并且您有 msys,则它是 \msys\bin) 编译、运行、调试等都很开心。
【讨论】:
【参考方案15】:我认为这是 MinGW/gcc 编译器问题,而不是 Microsoft Visual Studio 设置。
libgcc_s_dw2-1.dll
应该在编译器的 bin 目录中。您可以将此目录添加到 PATH 环境变量中以进行运行时链接,或者您可以通过在编译器标志中添加“-static-libgcc -static-libstdc++”来避免此问题。
如果您计划分发可执行文件,后者可能最有意义。如果您只打算在自己的机器上运行它,那么更改 PATH 环境变量是一个有吸引力的选择(减小可执行文件的大小)。
更新:
根据 Greg Treleaven 的反馈(请参阅下面的 cmets),我正在添加以下链接:
[Screenshot of Code::Blocks "Project build options"]
[GNU gcc link options]
后面的讨论包括-static-libgcc
和-static-libstdc++
链接器选项。
【讨论】:
我和@xRobot有同样的问题,我找不到任何地方可以向编译器标志添加东西,所以我尝试将它添加到其他选项,然后是链接器选项,但仍然出现错误消息.我在做什么有什么问题吗? @Greg Treleaven:为了清楚起见,您正在使用 Code::Block 构建可执行文件,它在 IDE 中按预期工作,但报告错误“无法启动,因为 libgcc_s_dw2-1.dll 是当您尝试在 IDE 之外运行它时丢失”。您检查了编译器的 bin 目录,是的,这个 DLL 实际上就在那里。您正在尝试通过执行静态链接来解决问题,该链接从库中提取已编译的代码,因此不需要 DLL(运行时链接),但它不起作用。两个建议:进行干净的构建(更改选项可能不会触发重新构建),并尝试添加 PATH 变量。 @hardmath:在进行干净的重建后仍然无法正常工作,所以我想我必须使用其他方法之一来解决这个问题。感谢您的帮助。 @Greg Treleaven:尝试将编译器的 bin 目录添加到您的 PATH 的原因是为了显示(如果这样的话)可执行文件仍在为标准库(DLL)的运行时链接而构建)。我认为问题在于,我们需要找到(如果你想对库代码进行静态链接)将编译器标志放在哪里。 这个讨论继续(并且已经解决)here.【参考方案16】:将该 dll 的路径添加到 PATH 环境变量中。
【讨论】:
为什么 Visual Studio 不会发生这种情况? 可能是因为该 dll 的路径列在 VisualStudio 的工具 -> 选项 -> 项目和解决方案 -> VC++ 目录 -> 可执行文件中。搜索 dll 的路径时,Visual Studio 会在此处和 PATH 环境变量中查找。【参考方案17】:在您的 PC 上找到该 dll,并将其复制到可执行文件所在的同一目录中。
【讨论】:
为什么 Visual Studio 不会发生这种情况? 它也可以,但使用其他 dll。例如,如果您缺少 msvcrt90.dll,您的可视化编译项目将无法启动(虽然 iut 通常安装在系统范围内)以上是关于程序无法启动,因为缺少 libgcc_s_dw2-1.dll的主要内容,如果未能解决你的问题,请参考以下文章
由于在 Code::Block 中缺少“libgcc_s_dw2-1.dll”,OpenCV 程序无法运行
程序无法启动,因为缺少 opencv_core2410d.dll