Hallo zusammen, ich möchte VSCode MinGW C++ und OpenCV verwenden, um ein einfaches opencv-Projekt zu erstellen, aber aus einem unbekannten Grund bekomme ich diesen Fehler. Was soll ich tun?
Visual studio 2017
works die main.cpp auf der x64-Architektur ausführen kann.Der folgende Code ist der, den ich auf VSCode ausführen möchte, derselbe Code, den ich auf Visual Studio 2017 ausführte.
50 points
wenn jemand das beweist mit:Ein erfolgreicher Build.
#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;
}
In meinem VSCode-Editor versuche ich, die Anwendung mithilfe von task.json mit CTRL + SHIFT + B
zu erstellen.
{
// 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
}
}
]
}
{
"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
}
Und ich bekomme diesen Fehler
> 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.
Ich habe die opencv-Bibliotheken mit der vcpkg
-Anweisung mit diesem Befehl vcpkg install opencv
erstellt, und ich denke, die Aufgabe wird sehr gut erledigt.
Nachdem ich alle Dateien mit der vspkg
erstellt habe, teste ich alle Dateien mit Visual Studio 2017 und funktioniert, aber mein Hauptziel ist es, die Arbeit mit der VSCode
zu machen.
Um Ihnen zu zeigen, dass ich die Dateien erzeugt habe.
Hier finden Sie Anweisungen zum Einrichten von OpenCV in MSYS2/mingw64. Ich kann mit VsCode nicht helfen, aber vielleicht hilft dies Ihnen dabei, Fortschritte zu erzielen, oder anderen Menschen, die diese Frage finden, durch Suchen zu helfen.
Sie müssen OpenCV nicht selbst erstellen. Es gibt vorgefertigte Binärdateien für MinGW-w64. Der Zweck von MSYS2 besteht darin, eine Shell im Unix-Stil bereitzustellen und als Paketmanager zu fungieren. Wenn Sie MSYS2 noch nicht verwendet haben:
g++
funktioniert.Dann können Sie OpenCV hinzufügen:
pacman -Ss mingw64/mingw-w64-x86_64-opencv
und es ist alles bereit zu gehen. Ich habe Ihr Beispielprogramm mit dem folgenden Befehl in der MSYS2-Shell kompiliert:
g++ -o main main.cpp -std=c++17 -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
und führte das Programm erfolgreich aus.
Beachten Sie, dass Sie MSYS2 nicht für die Build-Umgebung verwenden müssen. Sie können g++
von der Windows-Eingabeaufforderung oder von einem beliebigen anderen IDE aus aufrufen, wenn Sie die Include- und Library-Pfade so einrichten, dass sie auf den Installationspfad des MSYS2-Headers und der Library zeigen. (Dies ist unter /mingw64/include/opencv*
und /mingw64/lib
unter dem MSYS2-Installationsstammverzeichnis).
Installieren Sie vcpkg (MS-Packager zum Installieren von Windows-basierten Open Source-Projekten) und verwenden Sie den Powershell-Befehl .\vcpkg install opencv:x64-windows-static
. Abhängigkeitsbibliotheken werden automatisch für Sie installiert.
Opencv kann mit .\vcpkg integrate install
automatisch in Ihr VS-Projekt integriert werden.