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

C++ 在动态链接库libstdc+中找不到过程入口点uuu gxx_personality_v0+-6.dll,c++,opencv,dll,codeblocks,libstdc++,C++,Opencv,Dll,Codeblocks,Libstdc++,我在尝试运行opencv应用程序时出错。我正在使用Windows7、CodeBlocks 12.11、opencv2.4.4和MinGW编译器(代码块中的那个)。它编译并创建可执行文件,但当我尝试运行时,它会崩溃,出现过程入口点错误。 我已经将C:\programs\CodeBlocks\Mingw\bin添加到“PATH”变量中,我知道有libstdc++-6.dll 我不知道发生了什么事 以下是简单的代码: include <iostream> include <openc

我在尝试运行opencv应用程序时出错。我正在使用Windows7、CodeBlocks 12.11、opencv2.4.4和MinGW编译器(代码块中的那个)。它编译并创建可执行文件,但当我尝试运行时,它会崩溃,出现过程入口点错误。 我已经将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;
} 
包括
包括
使用名称空间std;
使用名称空间cv;
int main()
{

这个问题在stackoverflow上似乎已经被回答了好几次。
作为其中之一,libstdc++-6.dll包含运行时环境。它是基本例程的实现,例如堆管理器或异常处理

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

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

  • 找到包含正确运行时版本的libstdc++-6.dll,并将其复制到可执行文件的目录中。您可以通过运行
    nm libstdc++-6.dll | grep personality
    来确定dll是否正确。如果列表中显示了
    \uugxx\u personality\u v0
    ,则您可能拥有正确的dll
  • 将运行时环境的副本放入可执行文件。您可以通过向链接器参数添加
    -static libgcc-static libstdc++
    来完成此操作
可能的副本