我用代码: : 块在 C + + 中创建了一个简单的程序。
如果我从 Code: : Block 运行它,它会正常工作; 但是如果我双击可执行文件来运行它,一个窗口会弹出这样的消息:
程序无法启动,因为您的计算机中缺少 libgcc _ s _ dw2-1.dll。 尝试重新安装程序以修复此问题。
那问题是什么,我要怎么做才能解决?
在您的 PC 上找到这个 dll,并将其复制到您的可执行文件所在的相同目录中。
将 dll 的路径添加到 PATH 环境变量。
我相信这是 MinGW/gcc 编译器的问题,而不是 Microsoft Visual Studio 设置的问题。
libgcc_s_dw2-1.dll应该在编译器的 bin 目录中。您可以将此目录添加到运行时链接的 PATH 环境变量,也可以通过在编译器标志中添加“-static-libgcc-static-libstdc + +”来避免此问题。
libgcc_s_dw2-1.dll
如果您计划分发可执行文件,后者可能是最有意义的。如果你只打算在你自己的机器上运行它,改变 PATH 环境变量是一个很有吸引力的选择(减小可执行文件的大小)。
更新:
根据 Greg Treleven 的反馈(见下面的评论) ,我添加了以下链接:
[代码截图: : 块“项目构建选项”]
[ GNU gcc 链接选项]
后面的讨论包括 -static-libgcc和 -static-libstdc++链接器选项。
-static-libgcc
-static-libstdc++
将“ libgcc _ s _ dw2-1.dll”复制到 were mak.exe is。 (如果您正在使用 Msys,请将其复制到 Msys bin) 确保在 env.PATH 中设置了 Make.exe 的路径 (如果 make.exe 在一个文件夹“ bin”中,很有可能,并且您有 msys,那么它就是 msys bin) 编译、运行、调试等。
看看 还有。它解决了我的问题。
顺便问一下,它肯定是 compiler旗帜吗? 也许 linker是更合适的术语在这里?
compiler
linker
在 Eclipse 中,您可以在项目属性 > C/C + + Build > Settings > mingW c + + Linker > Misc 下找到它
您必须将其添加到顶部的“链接标志”中,不能添加其他内容。 那就重建吧。
我发现,即使进行了优化,链接这些静态扩展的大小也会达到1400kb。与仅仅复制共享 DLL 相比,它要大277kb。它的388kb 以及后 UPxing 的一切。这里输得很惨。只要包含 DLL,最终用户就可以决定是否删除它们,如果它们安装在其他地方的话。
你能不能把它放在 System32或者其他类似的 dll 文件中,这样你尝试运行的每个程序在你的机器上都不会有这个问题?
我只需要知道该把它放在哪里。
每次我运行一个我刚刚构建的程序时,把它放在目录中是有点烦人..。
编辑: 我找到了解决办法:
将 libgcc _ s _ dw2-1.dll 解压缩到计算机上的某个位置 建议您将其解压缩到程序的目录,该目录是 请求 libgcc _ s _ dw2-1.dll。 如果这不起作用,那么必须将 libgcc _ s _ dw2-1.dll 解压缩到 您的系统目录。默认情况下,这是: C: Windows 系统(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 (如果使用 WindowsME,则键入 COMMAND)。 键入 regsvr32 libgcc _ s _ dw2-1.dll 并按 Enter。
将 libgcc _ s _ dw2-1.dll 解压缩到计算机上的某个位置 建议您将其解压缩到程序的目录,该目录是 请求 libgcc _ s _ dw2-1.dll。
如果这不起作用,那么必须将 libgcc _ s _ dw2-1.dll 解压缩到 您的系统目录。默认情况下,这是:
如果您使用的是64位版本的 Windows,您还应该将 C: Windows SysWOW64中的 libgcc _ s _ dw2-1.dll
确保覆盖任何现有文件(但是要备份 重新启动计算机。
如果问题仍然存在,请尝试以下操作:
代码: : 块: 在设置中添加“-static”-> 编译器-> 链接器设置-> 其他链接器选项。
只需进入设置 > > 编译器和调试器,然后单击链接器设置选项卡,进入“其他链接器选项”编辑控件并粘贴到“-static-libgcc-static-libstdc + +”,代码: : 块的编译器标志选项中没有编译器标志选项所以这就是解决这个问题的方法,我来这里也是为了寻找一个解决方案,一个关于“-static-libgcc-static-libstdc + +”的人给出了正确的想法,我偶然想出了其余的,但它工作了,文件现在可以从外部点击代码: : 块,工作在桌面上。
添加“-static”到其他链接器选项可以解决这个问题。当我在另一个系统上测试这个时,我也遇到了同样的问题,但不是在我自己的系统上,所以即使你没有在你的开发系统上注意到这个问题,如果你是静态链接的话,你应该检查你是否有这个集合。
另一个注意事项是,将 DLL 复制到与可执行文件相同的文件夹中不是一种解决方案,因为它打破了静态链接的想法。
另一个选择是使用 MinGW 的 TDM 版本来解决这个问题。
更新编辑: 这可能不能解决所有人的问题。我最近发现的另一个原因是,当你使用别人编译的库时,我的情况是 SFML 编译不当,所以需要一个不存在的 DLL,因为它是用与我使用的不同版本的 MinGW 编译的。我使用了一个侏儒版本,这使用了另一个,所以我没有 DLL 的任何地方,当然,我不希望它,因为它是一个静态构建。解决方案可能是找到库的另一个构建版本,或者自己构建它。
转到 MinGW http source/forge.net 树。在 Home/MinGW/Base/gcc/Version4(或任何正在使用的版本)/gcc-4(version)/下面,您将找到一个像 gcc-core-4.8.1-4-mingw32-dll.tar 这样的文件。伊兹玛。将其解压缩并进入 bin 文件夹,您将在其中找到 libgcc _ s _ dw2-1.dll 和其他 dll。将需要的内容复制并粘贴到 bin 目录中。
我能够通过在编译器中使用“ gcc”而不是“ g + +”来克服这个问题。我知道对大多数人来说这不是一个选择,但是我想我应该把它作为一个变通的选择:)
使用 msys2时,我在调试环境中试图执行项目的发行版时也出现了同样的错误。我的问题的解决方案是显而易见的: 使用可执行与调试符号。
在编译线上包含 - 静态-libgcc,解决了这个问题
g++ my.cpp -o my.exe -static-libgcc
根据: @ 苦差事
例如,如果您在 MSYS2上,也可以在配置文件 [ . profile ]上创建 化名
alias g++="g++ -static-libgcc"
现在您的 GCC 命令也可以执行; -)
请记住重新启动您的终端
在代码块中,您可以进入设置... 编译器..。 随便选一个 1)蓝色方框中的两个项目 或者 2)绿色盒子里的那个东西
如果您想知道在哪里可以下载共享库(尽管除非包含 dll,否则在客户机设备上无法使用) ,这里有一个链接: https://de.osdn.net/projects/mingw/downloads/72215/libgcc-9.2.0-1-mingw32-dll-1.tar.xz/
步骤1: 设置 -static-libgcc和 -static-libstdc++标志,或者在 settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags下设置 -static标志
settings -> compiler -> global compiler settings | Compiler settings | Compiler Flags
-static
步骤2(在其他答案中没有强调) : 干净在构建和运行之前的构建。如果不进行清理,您可能会认为您正在重新构建项目,但是您最终将得到相同的结果。前任。清理将删除 bin和 obj文件夹中的文件,以便在构建时,在 bin和 obj文件夹中创建一组新的文件。
bin
obj