无法找到过程入口点__gxx_personality_v0

时间:2013-09-06 23:23:31

标签: c++ qt mingw codeblocks irrlicht

编者注:类似于“程序错误点_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_无法在动态链接库libstdc++-6.dll中找到”的错误消息具有相同的原因和相同的解决方案应用


如果我想在Windows中运行我的Irrlicht C ++控制台应用程序,我会不断收到此错误:

the procedure entry point __gxx_personality_v0 could not be located in the dynamic link library libstdc++-6.dll

我正在使用CodeBlocks v12.11与MinGW和Irrlicht v1.8引擎。我正确设置了它。在我的电脑上还有一个安装了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;
}

我将编译器配置为C:\CodeBlocks\MinGW。 每个文件(设置中都有一些文件)位于bin下,make.exe除外。这是正常的吗?

自动检测按钮也会显示上面的路径。

5 个答案:

答案 0 :(得分:52)

我也有这个问题。这为我解决了这个问题:

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

答案 1 :(得分:15)

发生这种情况的原因是因为libstdc++-6.dll目录中也可能存在WINDOWS\System32(或者可以通过PATH找到它的其他位置)。特别是当你使用不同版本的MingW时。因此,解决方案是以这样的方式更改环境PATH变量,使MingW\bin目录位于Windows系统目录之前,将现有版本替换为较新版本或将dll复制到exectuable文件夹

答案 2 :(得分:2)

这些错误是由不匹配的DLL引起的。

对于问题中的消息,它是libstdc++-6.dll的错误版本,但您可以看到该消息引用了使用各种版本的gcc for Windows构建的其他DLL;甚至提到正在运行的.exe文件。

这里的具体变化是:

  • basic_string|char_traits... - 对于C ++ 11,ABI更改为std::string
  • __gxx_personality_v0 - 我认为这与正在使用的异常实现有关(Windows的gcc可以使用各种Dwarf2,Win32-SEH,SJLJ等)。

如果由一种编译器编译的应用程序链接到由不同风格编译的DLL,您将看到此消息。

要查看可执行文件的已找到DLL的列表,可以在Dependency Walker中打开可执行文件并启用&#34;完整路径&#34;选项。另一种方法是使用ldd,如果您安装了Cygwin或类似的。

最常见的罪魁祸首是libstdc++-6.dll。不幸的是,ABI的变化并没有伴随着libstdc ++版本号的变化。并且它不是出现在文件名中的异常模式的默认行为。 (如果你自己建立MinGW,你可以改变这些事情。)

我建议检查Dependency Walker找到的每个DLL,并确保它找到与你构建可执行文件的MinGW相同版本的DLL。 libgcc-s-*.dll是另一个值得关注的人。

实际上我建议系统路径上没有这些DLL。为了开发,我将一个PATH加载到我编译的同一编译器的DLL中;为了部署,我将DLL与每个可执行文件捆绑在同一目录中,因为运行时DLL搜索总是先检查该目录。然后就没有机会找到碰巧在系统搜索路径上的旧DLL。

答案 3 :(得分:2)

在分析此案例时,我意识到系统路径配置中还有2个版本的libstdc ++-6.dll。一个在mingw64中,另一个在postgres中。

问题在于它们不相同,它们的大小也不同。

我的解决方法很简单:
我将mingw64版本以下的postgres版本下移。 而且效果很好。

答案 4 :(得分:0)

copy libstdc ++ - 6.dll在mingw \ bin中找到windows \ system32 祝你好运