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

时间:2013-04-22 07:18:06

标签: opencv dll codeblocks libstdc++

我在尝试运行opencv应用程序时遇到了这个错误。我使用的是Windows7,CodeBlocks 12.11,opencv2.4.4和MinGW编译器(CodeBlocks中的编译器)。它编译并创建可执行文件,但是当我尝试运行它时,程序入口点错误崩溃。 我已将C:\ programs \ CodeBlocks \ Mingw \ bin添加到“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;
} 

2 个答案:

答案 0 :(得分:1)

这个问题似乎已在stackoverflow上多次回答。 What is __gxx_personality_v0 for?作为其中之一

答案 1 :(得分: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++添加到链接器参数来完成此操作。