【问题标题】: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
【发布时间】:2013-04-22 07:18:05
【问题描述】:

我在尝试运行我的 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;
} 

【问题讨论】:

标签: c++ opencv dll codeblocks libstdc++


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2013-06-28
      • 2012-09-09
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2015-03-29
      相关资源
      最近更新 更多