webentwicklung-frage-antwort-db.com.de

Opencv C++ MinGW VSCode schwerwiegender Fehler zum Kompilieren

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?

Ich möchte erwähnen, dass ich in 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.

Nach 10 Tagen versuche ich 50 points wenn jemand das beweist mit:

  • VSCODE
  • C++ 17
  • Opencv 
  • unter Windows 10 x64-Architektur

Ein erfolgreicher Build.

src/main.cpp

#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.

aufgaben.json

{
    // 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
}

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.

C:\vcpkg\installierte\x64-windows\include

 enter image description here

C:\vcpkg\installiert\x64-windows\include\opencv2

 enter image description here

C:\vcpkg\installierte\x64-windows\lib

 enter image description here

6
George C.

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:

  1. Installieren Sie MSYS2 und aktualisieren Sie es wie hier gezeigt auf den neuesten Stand .
  2. Öffnen Sie eine MSYS2/mingw64-Shell (keine MSYS2/msys2-Shell). In dieser Shell erstellte Binärdateien werden als eigenständige Windows-Binärdateien ausgeführt. Sie sind nicht von der MSYS2-Umgebung abhängig.
  3. Testen Sie, dass 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).

3
M.M

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.

1
seccpur