Почему я получаю ошибки «неопределенной ссылки» при попытке использовать OpenCV в Qt Creator с MinGW?

Только начал использовать OpenCV и Qt. Когда я использовал Qt 6, в соответствии с процедурами из книги вводился соответствующий код, но на этапе компиляции сообщалось об ошибке. Изначально я думал, что библиотека OpenCV скомпилирована плохо, но при использовании VS 2022 проблем нет. Ниже приведены некоторые фрагменты кода:

// vscode 

using namespace cv;
Mat image = imread("C:\\Users\\Documents\\Screenshot 2023-07-30 205234.png");
imshow("Output", image);

следуйте Qt Creator:

#.pri 
INCLUDEPATH += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/include
Debug:{
    LIBS += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/x64/vc17/lib/opencv_world4100d.lib
}
Release:{
    LIBS += D:/data/opencv-4.10.0/opencv-4.10.0/_build/install/x64/vc17/lib/opencv_world4100.lib
}
// qform
#include "mainwindow.h"

#include <QApplication>
#include "opencv2/opencv.hpp"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    cv::Mat image = cv::imread("C:/Users/邵长虹/Documents/Screenshot 2023-07-30 205234.png");
    cv::imshow("Output", image);
    MainWindow w;
    w.show();
    return a.exec();
}

Информация об ошибке:

debug/main.o: in function qMain(int, char ** )':
undefined reference to `cv::imread(std::__cxx11::basic_string <char, std::char_traits<char>, std::allocator<char> > const&, int)'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_72_MinGW_64_bit-Debug/../../main.cpp:11: undefined reference to `cv::imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_7_2_MinGW_64_bit-Debug/../../main.cpp:15: undefined reference to 'cv::Mat::~Mat0'
D:\QTProject\MyFirstQtProject\build\Desktop_Qt_6_7_2_MinGW_64_bit-Debug/../../main.cpp:15: undefined reference to 'cv::Mat::~Mat0'
collect2.exe: error: Id returned 1 exit status
Included header opencv.hpp is not used directly (fix available)

скриншот

Это пример кода в моем справочном листе:

INCLUDEPATH += c:/dev/opencv/build/install/include
Debug: {
LIBS += -lc:/dev/opencv/build/install/x86/vc14/lib/opencv_world330d
}
Release: {
LIBS += -lc:/dev/opencv/build/install/x86/vc14/lib/opencv_world330
}

скриншот

Я использую компилятор MinGW. Что я могу сделать, чтобы это исправить?

перекомпилируйте opencv с помощью mingw. Вы используете версию, скомпилированную с помощью vc17. Кроме того, imread не будет работать с символами, отличными от ascii, в пути к файлу. Смотрите это

Miki 27.06.2024 18:19

Я думаю, что Qt Creator может использовать MSVC. Я бы порекомендовал это вместо попытки сборки OpenCV MinGW.

Christoph Rackwitz 28.06.2024 08:17

Очень много думаю. Изначально я думал, что для перекомпиляции opencv используется MinGW, но позже я обнаружил, что это слишком сложно и на решение различных зависимостей уходит целый день, поэтому я сдался и переключился на msvc для компиляции qt

望曉天 30.06.2024 05:04
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как сказали несколько крупных парней выше, файлы библиотеки, созданные разными сборщиками, не являются универсальными, и при их действительном использовании относительно просто скомпилировать OpenCV с использованием vs + cmake в среде Windows, но в настоящее время QT6 по умолчанию использует MinGW. , Самое простое решение — заменить MinGW на MSVC 19 в пакете управления QT, чтобы эту проблему можно было легко решить. Следует отметить, что как новичок старайтесь не использовать MinGW для перекомпиляции OpenCV.

Другие вопросы по теме