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()'
- 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.
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})
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)
Code: Select all
Contents of linkLibs.rsp:
C:/Users/Michael/Documents/Development Libraries/opencv/build/x64/vc16/lib/opencv_world470d.lib
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.
Mobile version