Opencv C++ MinGW VSCode编译致命错误 [英] Opencv C++ MinGW VSCode fatal error to compile
问题描述
大家好,我想使用 VSCode MinGW C++ 和 OpenCV 创建一个简单的 opencv 项目,但由于未知原因,出现此错误我该怎么办?
Hi all I want to use VSCode MinGW C++ and OpenCV to create a simple opencv project but for an unknown reason, I get this error what should I do?
下面的代码是我想在 VSCode 上运行的代码,与我在 Visual Studio 2017 上运行的代码相同.
The code below is what I want to run on VSCode is the same code I run on the Visual Studio 2017.
- VSCODE
- C++17
- OpenCV
- 在 Windows 10 x64 架构上
成功构建.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat image;
image = imread("./22.png", IMREAD_COLOR); // Read the file
namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
if (!image.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
} else { // Image is good!
imshow("Display window", image); // Show our image inside it.
}
waitKey(0);
return 0;
}
在我的 VSCode 编辑器中,我尝试使用带有 CTRL + SHIFT + B
In my VSCode editor, I try to build the application using the tasks.json with CTRL + SHIFT + B
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "",
"args": [
"g++",
"-I", "C:\\vcpkg\\installed\\x64-windows\\include",
"-L", "C:\\vcpkg\\installed\\x64-windows\\lib",
"./src/main.cpp",
"-lopencv_core341",
"-lopencv_highgui341",
"-o app"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
c_cpp_properties.json
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src",
"C:/vcpkg/installed/x64-windows/include",
"C:/vcpkg/installed/x64-windows/lib"
],
"browse": {
"path": [
],
"limitSymbolsToIncludedHeaders": true
},
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17134.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx64/x64/cl.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64",
"C_Cpp.intelliSenseEngine": "Tag Parser"
}
],
"version": 4
}
我收到这个错误
> Executing task: g++ main.cpp -I C:/vcpkg/installed/x64-windows/include -L C:/vcpkg/installed/x64-windows/lib -lopencv_core341 -lopencv_highgui341 -o app <
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x51): undefined reference to `cv::imread(cv::String const&, int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0xa2): undefined reference to `cv::namedWindow(cv::String const&, int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x119): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x139): undefined reference to `cv::waitKey(int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv6StringC1EPKc[__ZN2cv6StringC1EPKc]+0x42): undefined reference to `cv::String::allocate(unsigned int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv6StringD1Ev[__ZN2cv6StringD1Ev]+0xf): undefined reference to `cv::String::deallocate()'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x2d): undefined reference to `cv::fastFree(void*)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3Mat7releaseEv[__ZN2cv3Mat7releaseEv]+0x40): undefined reference to `cv::Mat::deallocate()'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3MataSEOS0_[__ZN2cv3MataSEOS0_]+0xb4): undefined reference to `cv::fastFree(void*)'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
Terminal will be reused by tasks, press any key to close it.
我使用这个命令 vcpkg install opencv
使用 vcpkg
生成了 opencv 库,我认为它做得很好.
I have generated the opencv libs using the vcpkg
using this command vcpkg install opencv
and I think is doing the job very well.
在我使用 vspkg
生成所有文件后,我使用 Visual Studio 2017 测试了所有文件并且是有效的,但我的主要目标是使用 VSCode
但我不知道为什么会出现错误.
After I generated all the files with the vspkg
I test all the files with Visual Studio 2017 and is works, but my main goal is to make work with the VSCode
but I don't have any clue why I get the errors.
为了向您展示我已经生成了文件.
To show you that I have generated the files.
推荐答案
我尝试在 Windows 10 x64 上的 Visual Studio Code 中使用 MinGW-w64 g++ 使用 OpenCV 3.4.1 构建和运行 C++ 程序取得成功.但我不知道这是否真的是正确的"方法来做到这一点.截图
I have success trying to build and run a C++ program with OpenCV 3.4.1 using MinGW-w64 g++ in Visual Studio Code on Windows 10 x64. But I don't know if this is actually the "right" way to do it. Screenshot
- 下载并安装 MinGW-w64 选择
x86_64-8.1.0-posix-seh-rt_v6-rev0
版本或更新的 http://mingw-w64.org/doku.php/start. - 打开 CMD 并转到 C:\ 然后克隆这个 repo https://github.com/huihut/OpenCV-MinGW-Build 然后签出
OpenCV-3.4.1-x64
分支或执行这个git clone https://github.com/huihut/OpenCV-MinGW-Build.git -b OpenCV-3.4.1-x64
- 将 Mingw-w64 bin 文件夹添加到系统路径(对我来说路径是
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
) - 将您之前克隆的 OpenCV mingw bin 文件夹添加到系统路径(对我来说路径是
C:\OpenCV-MinGW-Build\x64\mingw\bin
) - 现在您已经可以使用 CMD 使用 g++ 构建程序,只需键入
g++ test.cpp -IC:\OpenCV-MinGW-Build\include -LC:\OpenCV-MinGW-Build\x64\mingw\bin-llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_features2d341 -llibopencv_flann341 -llibopencv_highgui341 -llibopencv_imgcodecs341 -llibopencv_imgproc341 -llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341 代码>只是改变<代码> TEST.CPP 代码> 到您的 .cpp 文件名.
- 使用 Visual Studio Code 打开您的 .cpp 文件,然后安装 Code Runner 扩展 https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner,我使用 Code Runner 轻松运行我的程序.
- 在 Visual Studio Code 中按
Ctrl + 逗号
然后搜索"code-runner.executorMap":
并更改"cpp:" 上的内容;
进入"cd $dir &&g++ $fileName -o $fileNameWithoutExt -IC:/OpenCV-MinGW-Build/include -LC:/OpenCV-MinGW-Build/x64/mingw/bin -llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_dnn341 -llibopencv_features2cvopencv_features2d34lib41 -llibopencv_features2cvopencv_features2d34lib11imgl4open11imgl411llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341$dir$fileNameWithoutExt",
您可以将此应用于用户设置或仅应用于工作区设置.` - 之后,只需按
Ctrl+Alt+N
即可构建并运行您的程序,或者只需按播放按钮即可.
- Download and Install MinGW-w64 choose
x86_64-8.1.0-posix-seh-rt_v6-rev0
version or newer http://mingw-w64.org/doku.php/start. - Open CMD and go to C:\ then clone this repo https://github.com/huihut/OpenCV-MinGW-Build then checkout the
OpenCV-3.4.1-x64
branch or just execute thisgit clone https://github.com/huihut/OpenCV-MinGW-Build.git -b OpenCV-3.4.1-x64
- Add Mingw-w64 bin folder to the system path (For me the path is
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
) - Add OpenCV mingw bin folder that you clone earlier to the system path (For me the path is
C:\OpenCV-MinGW-Build\x64\mingw\bin
) - For now you can already build a program using g++ using CMD just type
g++ test.cpp -IC:\OpenCV-MinGW-Build\include -LC:\OpenCV-MinGW-Build\x64\mingw\bin -llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_features2d341 -llibopencv_flann341 -llibopencv_highgui341 -llibopencv_imgcodecs341 -llibopencv_imgproc341 -llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341
just change thetest.cpp
to your .cpp file name. - Open your .cpp file using Visual Studio Code then install Code Runner extension https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner, I use Code Runner to easily run my program.
- Press
Ctrl + comma
in Visual Studio Code then search for"code-runner.executorMap":
and change the content on"cpp:"
entry to"cd $dir && g++ $fileName -o $fileNameWithoutExt -IC:/OpenCV-MinGW-Build/include -LC:/OpenCV-MinGW-Build/x64/mingw/bin -llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_features2d341 -llibopencv_flann341 -llibopencv_highgui341 -llibopencv_imgcodecs341 -llibopencv_imgproc341 -llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341 && $dir$fileNameWithoutExt",
you can apply this for user settings or just for workspace settings. ` - After that just press
Ctrl+Alt+N
to Build and Run your program or just press the play button.
我相信您也可以通过将 -IC:\OpenCV-MinGW-Build\include ..
添加到 来将其应用于
部分使用 Visual Studio Code C/C++ 扩展调试.您也可以将 tasks.json
args"C:/OpenCV-MinGW-Build/include"
添加到 c_cpp_properties.json
包含路径以启用智能感知.如果您想使用另一个版本的 OpenCV,只需将 g++ 参数的所有 341" 部分替换为另一个版本,例如使用 OpenCV 3.3.1 使用 -llibopencv_calib3d331
等等.
I believe you can also apply this to the tasks.json
by adding the -IC:\OpenCV-MinGW-Build\include ..
to the args
part to use the Visual Studio Code C/C++ extension debugging. Also you can add "C:/OpenCV-MinGW-Build/include"
to the c_cpp_properties.json
include path to enable intellisense. If you want to use another version of OpenCV just replace all the "341" part of the g++ argument to another version for example to use OpenCV 3.3.1 use -llibopencv_calib3d331
and so on.
我尝试编辑我的 tasks.json
和 launch.json
并且它适用于 gdb 调试器.tasks.json
: https://gist.github.com/agtbaskara/4a2ec96a31694a2ec96a31694a2ec9a3917a2elaunch.json
:https://gist.github.com/agtbaskara/de04db8b6a39a622ec_cpp_properties.json
: https://gist.github.com/agtbaskara/0eb870f70f7f7f70f70c
I have try to edit my tasks.json
and launch.json
and it works with gdb debugger.
tasks.json
: https://gist.github.com/agtbaskara/4a2ec9a3a9a963069e719c0477185321
launch.json
: https://gist.github.com/agtbaskara/de04db8b6a31522dd1e62c43aa6e0f89
c_cpp_properties.json
: https://gist.github.com/agtbaskara/0eb773ac3085557baf7bf20b031fb49e
这篇关于Opencv C++ MinGW VSCode编译致命错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!