程序入口点__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。

我也有这个问题。 这对我来说是固定的:

  1. 进入你的MinGW文件夹(应该是C:\ MinGW)
  2. 打开bin文件夹。
  3. 应该有一个名为libstdc ++ – 6.dll的文件
  4. 将其复制到与可执行文件相同的目录中。

这应该工作…

发生这种情况的原因是因为在WINDOWS\System32目录中(或者在可以通过PATHfind的其他位置)也可能存在libstdc++-6.dll 。 特别是当你使用不同版本的MingW。 因此,解决scheme是更改环境PATHvariables,以使您的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好运