Bonjour à tous, Je souhaite utiliser VSCode MinGW C++ et OpenCV pour créer un projet OpenCV simple, mais pour une raison inconnue, je reçois cette erreur. Que dois-je faire?
Visual studio 2017
fonctionne, je peux exécuter le fichier main.cpp sur une architecture x64.Le code ci-dessous est ce que je veux exécuter sur VSCode est le même que celui que je lance sur Visual Studio 2017.
50 points
si quelqu'un le prouve avec:Une construction réussie.
#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;
}
Dans mon éditeur VSCode, j'essaie de construire l'application à l'aide du fichier tasks.json avec 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
}
}
]
}
{
"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
}
Et je reçois cette erreur
> 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.
J'ai généré les bibliothèques opencv en utilisant la variable vcpkg
à l'aide de la commande vcpkg install opencv
et je pense que le travail est très bien fait.
Après avoir généré tous les fichiers avec la vspkg
, je teste tous les fichiers avec Visual Studio 2017 et tout fonctionne, mais mon objectif principal est de faire en sorte que la VSCode
fonctionne, mais je ne sais pas pourquoi je reçois les erreurs.
Pour vous montrer que j'ai généré les fichiers.
Voici les instructions pour configurer OpenCV dans MSYS2/mingw64. Je ne peux pas vous aider avec VsCode mais peut-être que cela vous aidera à progresser ou à aider les autres personnes qui trouvent cette question en cherchant.
Vous n'avez pas besoin de créer OpenCV vous-même; il existe des fichiers binaires pré-emballés pour MinGW-w64. Le but de MSYS2 est de fournir un shell de style unix et d'agir en tant que gestionnaire de paquets. Si vous n'avez pas utilisé MSYS2 auparavant:
g++
fonctionne.Ensuite, vous pouvez ajouter OpenCV:
pacman -Ss mingw64/mingw-w64-x86_64-opencv
et tout est prêt à partir. J'ai compilé votre exemple de programme à l'aide de la commande suivante dans MSYS2 Shell:
g++ -o main main.cpp -std=c++17 -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
et exécuté le programme avec succès.
Notez qu'il n'est pas nécessaire d'utiliser MSYS2 pour l'environnement de construction. vous pouvez appeler g++
à partir d'une invite de commande Windows ou de tout autre IDE si vous configurez les chemins d'accès Include et Library de manière à pointer vers l'emplacement où le gestionnaire de packages de MSYS2 a installé les en-têtes et les bibliothèques. (Qui est sous /mingw64/include/opencv*
et /mingw64/lib
, sous la racine d'installation de MSYS2).
Installez vcpkg (le conditionneur MS pour installer des projets open source basés sur Windows) et utilisez la commande powershell .\vcpkg install opencv:x64-windows-static
. Les bibliothèques de dépendances seront automatiquement installées pour vous.
Opencv peut être intégré automatiquement dans votre projet VS à l'aide de .\vcpkg integrate install
.