程序入口点__gxx_personality_v0无法在动态链接库libstdc++-6.dll中找到

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

本文关键字:libstdc++-6 动态链接库 dll 入口 gxx personality 程序 v0      更新时间:2023-10-16

当我试图运行我的openv应用程序时,我得到了这个错误。我正在使用Windows7,CodeBlocks 12.11, opencv2.4.4和MinGW编译器(CodeBlocks中包含的那个)。它编译并创建了可执行文件,但是当我试图运行它时,它崩溃了,出现了过程入口点错误。我已经将C:programsCodeBlocksMingwbin添加到PATH变量中,我知道有libstdc++-6.dll。

我不知道发生了什么事。

这是简单的代码:

include <iostream>
include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main()
{
cout << "Hello world!" << endl;
namedWindow("window");
Mat image=imread("mustang.jpg",CV_LOAD_IMAGE_COLOR);
imshow("window",image);
waitKey(0);
return 0;
} 

libstdc++-6.dll包含运行时环境。它是基本例程的实现,例如堆管理器或异常处理。

这些基本例程几乎在每个程序中都使用。因此,在每个程序中都放一个副本是对内存的浪费。这就是为什么它们通常被打包到一个共享库(DLL)中。当程序需要运行时的例程时,可以请求DLL。

在您的情况下,libstdc++-6.dll包含错误的运行时版本。有两种可能:

  • 找到包含正确版本运行时的libstdc++-6.dll,并将其复制到可执行文件的目录中。通过执行nm libstdc++-6.dll | grep personality命令可以判断DLL是否正确。如果__gxx_personality_v0出现在列表中,那么您可能有正确的DLL。
  • 将运行时环境的副本放入可执行文件中。您可以通过将-static-libgcc -static-libstdc++添加到您的链接器参数中来实现这一点。

这个问题似乎在stackoverflow上已经回答了好几次了。__gxx_personality_v0是干什么用的?作为其中之一