C++ OpenCV не удается правильно связать в Windows, несмотря на то, что каталог включения в порядке и пакет найденC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++ OpenCV не удается правильно связать в Windows, несмотря на то, что каталог включения в порядке и пакет найден

Сообщение Anonymous »

Я следил за этим видео, пытаясь начать работу над проектом OpenCV C++ в Visual Studio Code с использованием CMake.
Проблема заключается в том, что когда я пытаюсь создать свой код, библиотеки 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 может обнаружить имена.
Мой файл CMakeLists.txt выглядит следующим образом:

Код: Выделить всё

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})
Чтобы быть совершенно ясным, CMake может настроить и сгенерировать Makefile для этого проекта.
Когда я раскомментирую строку 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)
Файл CMakeFiles\OpenCVProject.dir\linkLibs.rsp также содержит правильный каталог для файла .lib:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»