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

3
我在尝试运行我的OpenCV应用程序时遇到了这个错误。我使用的是Windows 7、CodeBlocks 12.11、OpenCV 2.4.4和MinGW编译器(CodeBlocks自带)。它可以编译并创建可执行文件,但当我尝试运行它时,会崩溃并出现“procedure entry point”错误。
我已将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;
} 

可能是重复的问题:找不到过程入口点__gxx_personality_v0 - M.M
2个回答

3
libstdc++-6.dll包含了运行时环境。它是基本例程的实现,例如堆管理器或异常处理。
这些基本例程在几乎每个程序中都会用到。因此,将它们的副本放入每个程序中会浪费内存。这就是为什么它们通常被打包到共享库(DLL)中。程序可以在需要运行时例程时请求DLL。
在您的情况下,libstdc++-6.dll包含了错误版本的运行时。有两种可能性:
1.找到一个包含正确版本运行时的libstdc++-6.dll,并将其复制到可执行文件的目录中。您可以通过运行“nm libstdc++-6.dll | grep personality”来确定DLL是否正确。如果列表中出现“__gxx_personality_v0”,则您可能拥有正确的DLL。
2.将运行时环境的副本放入可执行文件中。您可以通过将“-static-libgcc -static-libstdc++”添加到链接器参数中来实现此操作。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接