程序入口点__gxx_personality_v0找不到
编者注:类似于“过程错误点_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_
不能位于dynamic链接库libstdc++-6.dll
”中的错误消息具有相同的原因,并且应用相同的解决scheme。
如果我想在Windows中运行Irrlicht C ++控制台应用程序,我一直在收到这个错误:
the procedure entry point __gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll
我正在使用MinGW和Irrlicht v1.8引擎的CodeBlocks v12.11。 我正确地设置它。 在我的电脑上还安装了MinGW的Qt。 有可能是冲突吗?
这是源代码:
#include <irrlicht.h> using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; int main() { IrrlichtDevice *device = createDevice( video::EDT_OPENGL); if (!device) return 1; IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); guienv->addStaticText(L"Hello World", core::recti(10, 10, 100, 30)); device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo"); while(device->run()) { driver->beginScene(true, true, SColor(250, 190, 1, 2)); smgr->drawAll(); guienv->drawAll(); driver->endScene(); } device->drop(); return 0; }
我将编译器configuration为C:\CodeBlocks\MinGW
。 每个文件(有一些在设置中显示)位于bin
下,除了make.exe
。 这是正常的吗?
自动检测button也build议上面的path。
我也有这个问题。 这对我来说是固定的:
- 进入你的MinGW文件夹(应该是C:\ MinGW)
- 打开bin文件夹。
- 应该有一个名为libstdc ++ – 6.dll的文件
- 将其复制到与可执行文件相同的目录中。
这应该工作…
发生这种情况的原因是因为在WINDOWS\System32
目录中(或者在可以通过PATHfind的其他位置)也可能存在libstdc++-6.dll
。 特别是当你使用不同版本的MingW。 因此,解决scheme是更改环境PATH
variables,以使您的MingW\bin
目录位于Windows系统目录之前,用新的版本replace现有的版本或将DLL复制到exectuable文件夹。
这些错误是由不匹配的DLL引起的。
对于这个问题中的消息,它是libstdc++-6.dll
一个不正确的版本,但是你可以看到引用其他DLL的消息,这些DLL是用各种版本的gcc for Windows构build的; 甚至提到正在运行的.exe
文件。
这里的具体变化是:
-
basic_string|char_traits...
– 对于C ++ 11,出现了一个将ABI更改为std::string
更改 -
__gxx_personality_v0
– 我相信这与正在使用哪个exception实现有关(gcc for Windows可以使用各种Dwarf2,Win32-SEH,SJLJ等)
如果由一种编译器编译的应用程序链接到由不同风格编译的DLL,您将看到此消息。
要查看可执行文件的DLL列表,可以在Dependency Walker中打开可执行文件并启用“完整path”选项。 另一种方法是使用ldd
如果你有Cygwin或类似的安装。
最常见的罪魁祸首是libstdc++-6.dll
。 不幸的是,ABI的变化并没有伴随着libstdc ++版本号的变化; 而且它不是出现在文件名中的例外模式的默认行为。 (如果你自己构buildMinGW,你可以改变这些东西)。
我build议检查由Dependency Walker发现的每个DLL,并确保它find与您构build可执行文件的MinGW相同的版本。 libgcc-s-*.dll
是另一个需要注意的地方。
事实上,我会build议在系统path中没有任何这些DLL。 对于开发,我将一个PATH加载到我正在编译的相同编译器的DLL中; 并且为了部署,我把DLL放在与每个可执行文件相同的目录中,因为运行时DLLsearch总是先检查那个目录。 那么就没有机会发现碰巧在系统searchpath上的旧DLL。
复制libstdc ++ – 6.dll在mingw \ bin中findwindows \ system32好运