运行 OpenCV 使用 MingW 项目时的入口点错误
Entry point errors when running OpenCV projects with MingW
我已经在 Windows 10 上安装了 MingW C++ 编译器。我成功地构建了 OpenCV 库。
然后我写了一个测试工程如下
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat input = imread("lenna.jpg", IMREAD_GRAYSCALE);
//Mat input(100, 200, CV_8UC(1), Scalar(100));
if (input.empty())
{
cout << "Image is empty" << endl;
return -1;
}
unsigned short rows = input.rows;
unsigned short cols = input.cols;
for (unsigned short i = 0; i < cols / 4; i++)
for (unsigned short j = 0; j < rows / 4; j++)
input.at<uchar>(j, i) = 0;
const string wnd = "input";
namedWindow(wnd, WINDOW_NORMAL);
imshow(wnd, input);
waitKey();
destroyWindow(wnd);
return 0;
}
编译成功,但是如果我运行它,按照给定的顺序出现以下错误(从上到下一个一个)。
我的task.json
:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "\"${env:WINLAB_CPP}\g++.exe\"",
"args": [
"${file}",
"-o",
"${fileDirname}\${fileBasenameNoExtension}.exe",
"-I",
"c:\opencv_z\build\include",
"-L",
"c:\opencv_z\releases\bin",
"-llibopencv_core451",
"-llibopencv_highgui451",
"-llibopencv_imgcodecs451",
"-llibopencv_imgproc451",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
有什么提示可以解决吗?
罪魁祸首是:
我的 PATH
中有两个 64 位 libstdc++-6.dll
文件。不幸的是,较旧的位于顶部,因此任何对 64b 位的请求 libstdc++-6.dll
都将绑定到顶部。
因此,我需要新应用程序的应用程序崩溃了。交换它们可以解决问题。
使用32位版本的MinGW也可以解决这个问题,但这是一个非常有争议的选择!
我已经在 Windows 10 上安装了 MingW C++ 编译器。我成功地构建了 OpenCV 库。 然后我写了一个测试工程如下
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat input = imread("lenna.jpg", IMREAD_GRAYSCALE);
//Mat input(100, 200, CV_8UC(1), Scalar(100));
if (input.empty())
{
cout << "Image is empty" << endl;
return -1;
}
unsigned short rows = input.rows;
unsigned short cols = input.cols;
for (unsigned short i = 0; i < cols / 4; i++)
for (unsigned short j = 0; j < rows / 4; j++)
input.at<uchar>(j, i) = 0;
const string wnd = "input";
namedWindow(wnd, WINDOW_NORMAL);
imshow(wnd, input);
waitKey();
destroyWindow(wnd);
return 0;
}
编译成功,但是如果我运行它,按照给定的顺序出现以下错误(从上到下一个一个)。
我的task.json
:
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe build active file",
"command": "\"${env:WINLAB_CPP}\g++.exe\"",
"args": [
"${file}",
"-o",
"${fileDirname}\${fileBasenameNoExtension}.exe",
"-I",
"c:\opencv_z\build\include",
"-L",
"c:\opencv_z\releases\bin",
"-llibopencv_core451",
"-llibopencv_highgui451",
"-llibopencv_imgcodecs451",
"-llibopencv_imgproc451",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
有什么提示可以解决吗?
罪魁祸首是:
我的 PATH
中有两个 64 位 libstdc++-6.dll
文件。不幸的是,较旧的位于顶部,因此任何对 64b 位的请求 libstdc++-6.dll
都将绑定到顶部。
因此,我需要新应用程序的应用程序崩溃了。交换它们可以解决问题。
使用32位版本的MinGW也可以解决这个问题,但这是一个非常有争议的选择!