3

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

2 回答 2

2

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

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

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

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

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

于 2013-07-20T07:42:15.357 回答