我一直致力于一个项目(一个特定的游戏),我觉得我应该重新开始使用不同的库。因此,在执行此操作时,我重新安装了Code::Blocks并设置了我的新库和包含。
但是到目前为止我在开始你的问题时遇到了一个问题[我的新项目测试是否所有包含工作。这个问题是:libstdc++-6.dll was not found.
起初我想知道我是否可以在网上找到这个文件,但它无处可寻(或至少我搜索过的很多地方......)不久之后,我试着加载我的旧的项目,同样的问题再次发生(奇怪...... ._。)我在想它可能是我的编译器,所以我使用了我的旧编译器,它做了同样的事情!此刻我明天就解决了这个问题(今天就是这个问题)
所以我的问题是:如果有其他人遇到这个问题,你会如何解决?
我在Windows Vista 32位上使用Code :: Blocks with MinGW作为编译器。
***** EDIT *****
以下是我项目中的Build选项。请注意,这些是Project中的设置,而不是全局编译器:
在(项目名称) - >编译器设置 - > Otehr选项:
(我使用//
分隔命令)
-mthreads//
-fmessage-length=0//
-fexceptions//
-fident//
在(项目名称) - >编译器设置 - > #define:
WIN32//
_WINDOWS//
In(项目名称) - >链接器设置 - >其他链接器选项:
-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。另请注意,在项目的“调试和发布”设置中,没有任何内容。
如果有任何帮助,大多数这些setings也是我从Ogre3D Application setup tutorial获得的部分。
答案 0 :(得分:83)
如果您使用MingW在Windows上编译C ++代码,您可能希望添加选项-static-libgcc
和-static-libstdc++
以静态链接C和C ++标准库,从而消除随身携带的需要任何单独的副本。库的版本管理在Windows中很痛苦,所以我发现这种方法是创建Windows二进制文件的最快,最干净的解决方案。
答案 1 :(得分:8)
据我所知,这是C ++运行时库。所以这取决于你用来创建你的程序的编译器(新版本将包含一些C ++ 0x的东西,旧的版本可能不会例如。它取决于编译器及其版本)。
如果您使用MinGW,那么您应该使用libstdc ++ - 6.dll找到此编译器的文件夹。 MinGW / bin文件夹应该是您在计算机上搜索它的地方。
如果将此文件复制到与可执行文件相同的目录中,则应该没问题。
答案 2 :(得分:5)
只需从mingw目录中删除libstdc ++ - 6.dll.a \ libstdc ++。dll.a即可解决此问题。
我尝试使用标志-static-libstdc ++,但这对我不起作用。 我找到了解决方案:http://ghc.haskell.org/trac/ghc/ticket/4468#
答案 3 :(得分:2)
使用gcc使用以下选项编译MinGW时也会发生此错误:
-lstdc++ -lm
,而不是g ++
我没有注意到这些选项,并添加了:-static-libgcc -static-libstdc++
我仍然遇到错误,最后意识到我正在使用gcc,并将编译器更改为g ++并删除了-stdc++ and -lm
,并且一切都很好。
(我使用的是LINK.c而不是LINK.cpp ...使用make -pn | less
来查看所有内容!)
我不知道为什么前一位作者使用gcc和-stdc ++。我没有看到任何理由不使用g ++,它会自动链接到stdc ++ ......据我所知,提供其他好处(毕竟它是c ++编译器)。
答案 4 :(得分:1)
我在Fedora 20下使用Eclipse和MinGW进行交叉编译。 使用这些设置,程序将不再要求libstdc ++ - 6.dll。
项目类型 - 跨GCC
交叉设置
跨GCC编译器
命令: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
跨G ++编译器
命令: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
跨G ++链接器
命令: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
< / LI>图书馆搜索路径(-L):
的/ usr / x86_64的-W64-的mingw32 / SYS-根/的mingw / lib中
的/ usr / x86_64的-W64-的mingw32 / SYS-根/的mingw / bin中
答案 5 :(得分:1)
对使用eclipse for c / c ++但运行* .exe文件并显示错误的Windows用户有用:“缺少libstdc ++ 6.dll”
4种解决方法
Eclipse->“项目”->“属性”->“ C / C ++构建”->“设置”->“工具设置”->“ MinGW C ++链接器”->“其他”-> “链接器标志”(向其添加“ -static”)
将'{{您的MinGW的安装路径}} / bin添加到当前用户环境变量-Windows中的“路径”,然后重新启动Eclipse,最后重新编译。
将'{{您的MinGW的安装路径}} / bin添加到Windows环境变量-“路径”,然后重新启动Eclipse,最后重新编译。
将文件“ libstdc ++-6.dll”复制到运行* .exe文件的路径,然后重新运行。 (这不是一个好方法)
注意:文件“ libstdc ++-6.dll”位于文件夹“ {{您的MinGW的安装路径}} / bin”中
答案 6 :(得分:0)
我将libstdc ++ - 6.dll文件放在生成exe文件的同一文件夹中。
答案 7 :(得分:0)
您只需要在系统环境变量中的路径中添加“ mingw-install-directory” / bin /,就这样!
答案 8 :(得分:0)
我有同样的问题。我修好了它。我使用的是Codeblocks,我将.cpp文件保存在桌面上,而不是将其保存在MinGW所在的Codeblocks文件中。因此,我将所有dll文件从MinGW >> bin文件夹复制到了保存我的.cpp文件的位置。
答案 9 :(得分:0)
我只是遇到了这个问题。我刚刚将MinGW \ bin目录添加到路径环境变量中,它就解决了这个问题。
答案 10 :(得分:0)
你也可以复制你的exe文件所在目录的dll文件