Проблема заключается в том, что когда я пытаюсь создать свой код, библиотеки OpenCV не подключаются правильно. На этапе связывания я получаю кучу ошибок «неопределенная ссылка на cv::». Пример вывода при попытке сборки выглядит следующим образом:
Код: Выделить всё
[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()'
- Я загрузил и извлек предварительно созданные двоичные файлы OpenCV непосредственно с веб-сайта OpenCV. Они расположены в папке «C:\Users\Michael\Documents\Development Libraries\opencv».
- Я добавил файлы OpenCV lib и bin в переменную среды Path (общесистемную).
- CMake может найти пакет OpenCV. CMake может настроить и создать Makefile из моего CMakeLists.txt.
- Включаемые каталоги также верны. Более того, код Visual Studio не выдает никаких ошибок, когда я включаю заголовки OpenCV в свой проект; IntelliSense может обнаружить имена.
Код: Выделить всё
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})
Когда я раскомментирую строку set(CMAKE_VERBOSE_MAKEFILE ON), выходные данные сборки будут следующими:
Код: Выделить всё
[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)
Код: Выделить всё
Contents of linkLibs.rsp:
C:/Users/Michael/Documents/Development Libraries/opencv/build/x64/vc16/lib/opencv_world470d.lib
Я бы предпочел придерживаться этой настройки, поскольку кажется, что я очень близок к тому, чтобы заставить ее работать — я не хочу на этом этапе переключаться на Linux или переходить на Visual Studio 2022.
Я уверен, что об этом спрашивали уже много раз, но по какой-то причине ни один из предыдущих ответов не помог решить мою конкретную проблему. проблема.
Подробнее здесь: https://stackoverflow.com/questions/753 ... tory-being
Мобильная версия