Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法找到程序入口点\uuuugxx\u个性\uv0_C++_Qt_Mingw_Codeblocks_Irrlicht - Fatal编程技术网

C++ 无法找到程序入口点\uuuugxx\u个性\uv0

C++ 无法找到程序入口点\uuuugxx\u个性\uv0,c++,qt,mingw,codeblocks,irrlicht,C++,Qt,Mingw,Codeblocks,Irrlicht,编者按:类似于“过程错误点\u ZNSt7\uuu cxx1112basic\u stringIcSt11char\u traitsIcESaIcEEC1EPKcRKS3\uuu的错误消息无法在动态链接库libstdc++-6.dll中找到,原因相同,适用相同的解决方案 我想在Windows中运行我的RiCHIL+C++控制台应用程序时,我会不断地得到这个错误: 在动态链接库libstdc++-6.dll中找不到过程入口点\uuuu gxx\u personality\u v0 我将代码块v1

编者按:类似于“过程错误点
\u ZNSt7\uuu cxx1112basic\u stringIcSt11char\u traitsIcESaIcEEC1EPKcRKS3\uuu
的错误消息无法在动态链接库
libstdc++-6.dll
中找到,原因相同,适用相同的解决方案


<>我想在Windows中运行我的RiCHIL+C++控制台应用程序时,我会不断地得到这个错误:

在动态链接库libstdc++-6.dll中找不到过程入口点\uuuu gxx\u personality\u v0

我将代码块v12.11与MinGW和IRlicht 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;
}
#包括
使用内部收益率;
使用名称空间核心;
使用名称空间场景;
使用名称空间视频;
使用名称空间io;
使用名称空间gui;
int main(){
IrrlichtDevice*device=createDevice(视频::EDT_OPENGL);
如果(!设备)
返回1;
IVideoDriver*驱动程序=设备->获取视频驱动程序();
ISceneManager*smgr=device->getSceneManager();
IGUIEnvironment*guienv=device->getGUIEnvironment();
guienv->addStaticText(L“helloworld”,core::recti(10,10100,30));
设备->设置窗口标题(L“Hello World!-Irrlicht引擎演示”);
同时(设备->运行(){
driver->beginScene(true,true,SColor(250,190,1,2));
smgr->drawAll();
guienv->drawAll();
驱动程序->结束场景();
}
设备->下降();
返回0;
}
我将编译器配置为
C:\CodeBlocks\MinGW
。 除了
make.exe
之外,每个文件(设置中显示了一些文件)都位于
bin
下。这正常吗


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

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

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

  • 这应该行得通…

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

    将MingW\bin中的libstdc++-6.dll复制到Windows\system32
    祝你好运

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

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

    具体变化如下:

    • basic_-string | char_-traits…
      -对于C++11,有一个中断的ABI更改为
      std::string
    • \uuuuugxx\u personality\uv0
      -我认为这与正在使用的异常实现有关(用于Windows的gcc可以使用各种Dwarf2、Win32 SEH、SJLJ等)
    如果由一种风格的编译器编译的应用程序链接到由另一种风格编译的DLL,您将看到此消息

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

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

    我建议检查Dependency Walker找到的每个DLL,并确保它找到的DLL与构建可执行文件的MinGW版本相同
    libgcc-s-*.dll
    是另一个需要注意的问题

    事实上,我建议在系统路径上不要有任何这些DLL。对于开发,我为正在编译的同一个编译器加载指向DLL的路径;对于部署,我将DLL与每个可执行文件捆绑在同一目录中,因为运行时DLL搜索总是首先检查该目录。这样就不可能找到恰好位于系统搜索路径上的旧DLL

    (最近我倾向于使用静态链接,因为部署一个更大的文件比陷入DLL地狱的问题要小)

    另见:

    • 解决这个问题的另一个建议是,首先不要让二进制文件依赖于这些DLL

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

    问题是它们不一样,大小也不一样

    我的解决方案很简单:
    我将postgres的版本向下移动到mingw64版本下面。
    它工作得很好。

    你记得编辑“链接器”选项卡下的“设置”->“搜索目录”吗?(这样链接器就可以找到二进制文件。)这是一个很好的答案,它为我节省了无数的精力。如果我在minGW文件夹中没有libstdc++-6.dll,我能做什么?尽管这是霍布森的选择。将1M dll与可执行文件一起复制到目录,或在
    strip-s
    之后与500K可执行文件一起使用。(它实际上增加了复制dll的总体大小)请注意,另一个选项是使用静态链接,这样,如果有人找到此解决方案来修复dll,您的二进制文件无论如何都不会依赖于这些dll