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
下。这正常吗
“自动检测”按钮也会显示上面的路径。我也有这个问题。这为我解决了这个问题:
这应该行得通…之所以会发生这种情况,是因为
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
文件
具体变化如下:
-对于C++11,有一个中断的ABI更改为basic_-string | char_-traits…
std::string
-我认为这与正在使用的异常实现有关(用于Windows的gcc可以使用各种Dwarf2、Win32 SEH、SJLJ等)\uuuuugxx\u personality\uv0
ldd
,如果您安装了Cygwin或类似产品
最常见的罪魁祸首是libstdc++-6.dll
。不幸的是,ABI的变化并没有伴随着libstdc++版本号的变化;文件名中出现异常模式不是默认行为。(如果你自己动手,你可以改变这些东西)
我建议检查Dependency Walker找到的每个DLL,并确保它找到的DLL与构建可执行文件的MinGW版本相同libgcc-s-*.dll
是另一个需要注意的问题
事实上,我建议在系统路径上不要有任何这些DLL。对于开发,我为正在编译的同一个编译器加载指向DLL的路径;对于部署,我将DLL与每个可执行文件捆绑在同一目录中,因为运行时DLL搜索总是首先检查该目录。这样就不可能找到恰好位于系统搜索路径上的旧DLL
(最近我倾向于使用静态链接,因为部署一个更大的文件比陷入DLL地狱的问题要小)
另见:
- 解决这个问题的另一个建议是,首先不要让二进制文件依赖于这些DLL
我将postgres的版本向下移动到mingw64版本下面。
它工作得很好。你记得编辑“链接器”选项卡下的“设置”->“搜索目录”吗?(这样链接器就可以找到二进制文件。)这是一个很好的答案,它为我节省了无数的精力。如果我在minGW文件夹中没有libstdc++-6.dll,我能做什么?尽管这是霍布森的选择。将1M dll与可执行文件一起复制到目录,或在
strip-s
之后与500K可执行文件一起使用。(它实际上增加了复制dll的总体大小)请注意,另一个选项是使用静态链接,这样,如果有人找到此解决方案来修复dll,您的二进制文件无论如何都不会依赖于这些dll