C++ OpenCV kann unter Windows nicht richtig verknüpft werden, obwohl das Include-Verzeichnis in Ordnung ist und das PakeC++

Programme in C++. Entwicklerforum
Anonymous
 C++ OpenCV kann unter Windows nicht richtig verknüpft werden, obwohl das Include-Verzeichnis in Ordnung ist und das Pake

Post by Anonymous »

Ich habe dieses Video verfolgt und versucht, mit CMake mit einem OpenCV-C++-Projekt in Visual Studio Code zu beginnen.
Das Problem besteht darin, dass beim Versuch, meinen Code zu erstellen, die OpenCV-Bibliotheken nicht korrekt verknüpft werden. Während der Verknüpfungsphase erhalte ich eine Reihe von „undefinierten Verweisen auf cv::“-Fehler. Eine Beispielausgabe, wenn ich versuche zu erstellen, ist wie folgt:

Code: Select all

[build] [ 50%] Linking CXX executable OpenCVProject.exe
[build] c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\OpenCVProject.dir/objects.a(main.cpp.obj): in function `main':
[build] C:/Users/Michael/Dropbox/Computer Science/C, C++/TestProjects/OpenCVProject/main.cpp:6: undefined reference to `cv::Mat::Mat()'
[build] c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Michael/Dropbox/Computer Science/C, C++/TestProjects/OpenCVProject/main.cpp:7: undefined reference to `cv::imread(std::__cxx11::basic_string const&, int)'
[build] c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Michael/Dropbox/Computer Science/C, C++/TestProjects/OpenCVProject/main.cpp:7: undefined reference to `cv::Mat::operator=(cv::Mat&&)'
[build] c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/Users/Michael/Dropbox/Computer Science/C, C++/TestProjects/OpenCVProject/main.cpp:7: undefined reference to `cv::Mat::~Mat()'
Einige Klarstellungen:
  • Ich habe vorgefertigte OpenCV-Binärdateien direkt von der OpenCV-Website heruntergeladen und extrahiert. Sie befinden sich unter „C:\Benutzer\Michael\Dokumente\Entwicklungsbibliotheken\opencv“.
  • Ich habe die OpenCV-Bibliotheks- und Bin-Dateien zu meiner Path-Umgebungsvariablen hinzugefügt (systemweit).
  • CMake kann das OpenCV-Paket finden. CMake kann aus meiner CMakeLists.txt ein Makefile konfigurieren und generieren.
  • Die „include-Verzeichnisse“ sind ebenfalls korrekt. Darüber hinaus gibt mir Visual Studio Code keine Fehler, wenn ich OpenCV-Header in mein Projekt einbinde; IntelliSense kann die Namen erkennen.
Meine CMakeLists.txt-Datei sieht wie folgt aus:

Code: Select all

cmake_minimum_required(VERSION 3.14.0)
project(OpenCVProject VERSION 1.0.0)

set(CMAKE_CXX_STANDARD 17)
# set(CMAKE_VERBOSE_MAKEFILE ON)

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# This is just to confirm that the include directory is correct, which it is
message(STATUS "Looking for OpenCV includes in: ${OpenCV_INCLUDE_DIRS}")

add_executable(OpenCVProject main.cpp)

target_link_libraries(OpenCVProject ${OpenCV_LIBS})
Um es ganz klar zu sagen: CMake kann das Makefile für dieses Projekt konfigurieren und generieren.
Wenn ich die Zeile „set(CMAKE_VERBOSE_MAKEFILE ON) auskommentiere, lautet die Build-Ausgabe wie folgt:

Code: Select all

[build] [ 50%] Linking CXX executable OpenCVProject.exe
[build] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_link_script CMakeFiles\OpenCVProject.dir\link.txt --verbose=1
[build] "C:\Program Files\CMake\bin\cmake.exe" -E rm -f CMakeFiles\OpenCVProject.dir/objects.a
[build] C:\mingw64\bin\ar.exe qc CMakeFiles\OpenCVProject.dir/objects.a @CMakeFiles\OpenCVProject.dir\objects1.rsp
[build] C:\mingw64\bin\g++.exe -g -Wl,--whole-archive CMakeFiles\OpenCVProject.dir/objects.a -Wl,--no-whole-archive -o OpenCVProject.exe -Wl,--out-implib,libOpenCVProject.dll.a -Wl,--major-image-version,0,--minor-image-version,0 @CMakeFiles\OpenCVProject.dir\linkLibs.rsp
[build] c:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\OpenCVProject.dir/objects.a(main.cpp.obj): in function `main':
(the same undefined reference errors)
Die Datei CMakeFiles\OpenCVProject.dir\linkLibs.rsp scheint auch das richtige Verzeichnis zur .lib-Datei zu enthalten:

Code: Select all

Contents of linkLibs.rsp:
C:/Users/Michael/Documents/Development Libraries/opencv/build/x64/vc16/lib/opencv_world470d.lib
Ich bin mir nicht sicher, was ich versuchen kann, um das Problem zu beheben.
Ich würde lieber bei diesem Setup bleiben, da es so aussieht, als ob ich kurz davor stehe, es zum Laufen zu bringen – ich möchte zu diesem Zeitpunkt weder zu Linux noch zu Visual Studio 2022 wechseln.
Ich bin mir sicher, dass dies schon oft gefragt wurde, aber aus irgendeinem Grund hat keine der vorherigen Antworten mein Problem gelöst Problem.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post