libstdc++-6.dll未找到。

71
我一直在开发一个项目(具体来说是一个游戏),感觉应该使用不同的库重新开始。所以我重新安装了 Code::Blocks 并设置了新的库和包含文件。
但现在我遇到了一个问题,无法启动我的新项目以测试所有的包含文件是否有效。这个问题是:libstdc++-6.dll未找到。起初我想知道是否可以在网上找到这个文件,但它似乎无处可寻(或者至少是我搜索过的很多地方都没有...)。之后,我尝试加载我的旧项目,同样的问题又出现了(奇怪... ._.)。我想这可能是我的编译器问题,所以我使用了旧的编译器,结果还是一样!此时我把这个问题推迟到明天再解决(也就是今天)。
所以我的问题是:如果其他人遇到这个问题,你会如何解决?
我在 Windows Vista 32 位系统中使用 Code::Blocks 和 MinGW 编译器。以下是我的项目构建选项。请注意,这些是项目中的设置,而不是全局编译器设置:
在(项目名称)->编译器设置->其他选项中:
(我使用 // 分隔命令)
-mthreads//
-fmessage-length=0//
-fexceptions//
-fident//

在(项目名称)->编译器设置->#define中:

WIN32//
_WINDOWS//

在(项目名称)->链接器设置->其他链接器选项:

-static-libstdc++//
-static-libgcc//
-Wl,--enable-auto-image-base//
-Wl,--add-stdcall-alias//
-Wl,--enable-auto-import//

在链接器的“链接库”中,我有多个文件链接,其扩展名为.a,这些文件包括 Bullet Physics、Ogre3D 和 SFML。

在搜索目录中,我有链接到MinGW/bin和MinGW/lib目录以及其他不同库的链接。

我的编译器是MinGW,是用于Windows 32位的GNU GCC编译器。IDE是Codeblocks。还请注意,在项目的Debug和Release设置中,没有任何内容。

大部分这些设置都是从 Ogre3D应用程序设置教程中获得的,如果有帮助的话。


嘿,我刚刚删除了Ogre3D的设置,程序没有任何错误地运行。我想这可能是我使用的命令中触发了那个dll错误。 - Molmasepic
嗨,我又回来了。我刚刚开始逐个重新添加文件,发现包装器btOgre是这个dll错误的原因。我的问题是,使用Bullet Physics和ogre需要它。我将尝试找到一种正确使用它的方法。 - Molmasepic
嘿,我决定使用OgreBullet而不是btOgre。我在codeBlocks中自己构建了它,一切都很完美。感谢您的支持,对于所有不必要的麻烦,我很抱歉。 :) - Molmasepic
15个回答

133

如果你正在Windows下使用MingW编译C++代码,你可能想要添加选项-static-libgcc-static-libstdc++来静态链接C和C++标准库,从而无需携带这些库的任何独立副本。在Windows中进行库的版本管理很麻烦,因此我发现这种方法是创建Windows二进制文件的最快、最干净的解决方案。


这是与问题中所述的相同问题:“找不到libstdc++-6”...您将它们添加到链接器选项中,对吗?当编译器设置具有库或项目设置时,是否会有区别? - Molmasepic
1
@Molmasepic:你最初的问题非常模糊。这是编译时、链接时还是运行时错误?是谁发出的?你最后做了什么,用什么命令构建了项目? - Kerrek SB
哦,非常抱歉,我忘记了那个问题...它是在运行时出现的,所以这是一个运行时错误。再次对此表示歉意...编译过程很顺利,但就在应用程序启动时,它就报错了。 - Molmasepic
@Molmasepic:你能发布一下你使用的编译器和平台的详细信息,以及构建项目所用的命令吗? - Kerrek SB
5
对我而言,我使用了 g++ -static application.cpp 命令并且它奏效了。我使用的是 MSYS2。 - Inarus Lynx
显示剩余7条评论

18
据我所知,这是C++运行时库。因此它取决于您使用的编译器来创建程序(例如,新版本将包括一些C++0x内容,而旧版本可能不会)。 这取决于编译器及其版本。
如果您使用MinGW,则应使用位于该编译器文件夹中的libstdc++-6.dll。 在您的计算机上搜索应该在MinGW/bin文件夹中找到它。
如果您将此文件复制到可执行文件的相同目录中,那么一切都应该没问题。

是的,那就是我现在遇到的问题。在我的旧项目中,将编译器切换回旧版本后,它能正常工作。但如果我在同一编译器下创建新项目,我会得到那个错误……这真的很难理解,为什么以前不需要那个文件,但现在却需要了……而且一开始我根本没有那个文件,后来发现旧版和新版编译器完全相同,就像重新安装一样…… - Molmasepic
5
只需在编译命令中简单地添加 "-static",问题就消失了。 - meolic

7

只需从mingw目录中删除libstdc++-6.dll.a \ libstdc++.dll.a即可解决此问题。

我尝试使用-flag -static-libstdc ++,但这对我没有用。 我在以下链接中找到了解决方法:http://ghc.haskell.org/trac/ghc/ticket/4468#


5
当我使用MinGW的gcc编译时,出现了这个错误,使用了以下选项:-lstdc++ -lm,而不是g++。我没有注意到这些选项,并添加了:-static-libgcc -static-libstdc++。我仍然得到了错误,最后意识到我正在使用gcc,并将编译器更改为g++,并删除了-stdc++和-lm,一切都链接成功了。(我使用的是LINK.c而不是LINK.cpp...使用make -pn | less查看所有内容!)我不知道之前的作者为什么要使用带有-stdc++的gcc。我认为没有理由不使用会自动链接stdc++的g++...而且据我所知,提供其他好处(毕竟它是c++编译器)。

你指定的是哪个版本的C++标准? - vy32

4

对于使用Eclipse进行C/C++开发但运行*.exe文件时出现"missing libstdc++6.dll"错误的Windows用户,有以下4种解决方法:

  1. Eclipse ->"Project" -> "Properties" -> "C/C++ Build" -> "Settings" -> "Tool Settings" -> "MinGW C++ Linker" -> "Misscellaneous" -> "Linker flags" (在其中添加"-static")

  2. 将"{{你的MinGW安装路径}}/bin"路径添加到当前用户环境变量"Path"中,在重新编译前重启Eclipse。

  3. 将"{{你的MinGW安装路径}}/bin"路径添加到Windows环境变量"Path"中,在重新编译前重启Eclipse。

  4. 将文件"libstdc++-6.dll"复制到*.exe文件运行的路径中,然后重新运行。(这不是一个好方法)

注意:文件"libstdc++-6.dll"位于"{{你的MinGW安装路径}}/bin"文件夹中。


如果执行步骤3,则不需要步骤2。将其添加到系统路径中可供所有用户使用,因此步骤2是无意义的。 - James Wilkins
我的MinGW64/bin文件夹在Windows 10 x64下没有这样的.dll文件 :( - Vega

3

我在Fedora 20下使用Eclipse和MinGW进行交叉编译。使用以下设置,程序将不再要求libstdc++-6.dll。

项目类型 - Cross GCC

Cross Settings

  • 前缀:x86_64-w64-mingw32-
  • 路径:/usr/bin

Cross GCC Compiler

  • 命令:gcc

  • 所有选项:-I/usr/x86_64-w64-mingw32/sys-root/mingw/include -O3 -Wall -c -fmessage-length=0

  • 包含目录:/usr/x86_64-w64-mingw32/sys-root/mingw/include

Cross G++ Compiler

  • 命令:g++

  • 所有选项:-I/usr/x86_64-w64-mingw32/sys-root/mingw/include -O3 -Wall -c -fmessage-length=0

  • 包含目录:/usr/x86_64-w64-mingw32/sys-root/mingw/include

Cross G++ Linker

  • 命令:g++ -static-libstdc++ -static-libgcc

  • 所有选项:-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib -L/usr/x86_64-w64-mingw32/sys-root/mingw/bin

  • 库搜索路径 (-L):

    /usr/x86_64-w64-mingw32/sys-root/mingw/lib

    /usr/x86_64-w64-mingw32/sys-root/mingw/bin


2
请进一步解释,例如:为什么它对你有效? - Zilberman Rafael

3

我曾遇到过这个问题.. 我只需将MinGW\bin目录添加到路径环境变量中,就解决了问题。


1
你只需要将你的 "mingw-install-directory"/bin/ 添加到你的系统环境变量的 Path 中,就可以了!

1
我将libstdc++-6.dll文件放在生成exe文件的同一文件夹中。

1
将"mingw-install-directory"/bin/添加到您的系统环境变量中的路径中也可以解决此问题。 - Dan Ortega

0

你也可以将dll文件复制到exe文件所在的目录中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接