Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.205.30] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Windows 10 64 bit, Qt Creator 9.0.0, кит Desktop Qt6.4.1 shared MinGW-w64 MINGW64 (MSYS2). В простой программе:
#include <iostream> #include <string> #include <opencv2/highgui.hpp> #include <opencv2/imgcodecs.hpp> #include <opencv2/imgproc.hpp> int DisplayMessage(std::string sMes) { std::cout << sMes << std::endl; system("pause"); exit(EXIT_SUCCESS); } int main() { cv::Mat img = cv::imread("Access.jpg", cv::IMREAD_UNCHANGED); if(img.empty()) DisplayMessage("Image missing!"); cv::imwrite("result.jpg", img); DisplayMessage(""); } :-1: ошибка: debug/main.o: in function `main': D:\MyProgramming\qtTestCons\main.cpp:16: ошибка: undefined reference to `cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' :-1: ошибка: D:\MyProgramming\build-qtTestCons-Desktop_Qt_6_4_1_shared_MinGW_w64_MINGW64_MSYS2-Debug/../qtTestCons/main.cpp:17: undefined reference to `cv::Mat::empty() const' :-1: ошибка: D:\MyProgramming\build-qtTestCons-Desktop_Qt_6_4_1_shared_MinGW_w64_MINGW64_MSYS2-Debug/../qtTestCons/main.cpp:19: undefined reference to `cv::imwrite(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)' :-1: ошибка: D:\MyProgramming\build-qtTestCons-Desktop_Qt_6_4_1_shared_MinGW_w64_MINGW64_MSYS2-Debug/../qtTestCons/main.cpp:21: undefined reference to `cv::Mat::~Mat()' :-1: ошибка: D:\MyProgramming\build-qtTestCons-Desktop_Qt_6_4_1_shared_MinGW_w64_MINGW64_MSYS2-Debug/../qtTestCons/main.cpp:21: undefined reference to `cv::Mat::~Mat()' :-1: ошибка: collect2.exe: error: ld returned 1 exit status Файл pro: QT -= gui CONFIG += c++17 console CONFIG -= app_bundle SOURCES += \ main.cpp INCLUDEPATH += D:/opencv/build/include INCLUDEPATH += D:/opencv/build/x64/vc16/lib CONFIG(debug, debug|release): { LIBS += -LD:/opencv/build/x64/vc16/lib -lopencv_world470d } else:CONFIG(release, debug|release): { LIBS += -LD:/opencv/build/x64/vc16/lib -lopencv_world470 } |
Сообщ.
#2
,
|
|
|
Цитата tumanovalex @ ошибка: undefined reference to Говорит об одном - какой-то либы в линковке нет. Попробуй варианты и отпишись (это добавить в файл проекта .pro): 1) CONFIG += opencv 2) CONFIG += link_pkgconfig PKGCONFIG += opencv Начинай со второго варианта - он предпочтительней. В нем pkg-config еще и нужные флаги должен сам подтягивать. |
Сообщ.
#3
,
|
|
|
Спасибо за ответ. Я понял, что не найдены библиотеки, но знаю, как это исправить.
CONFIG += opencv CONFIG += link_pkgconfig PKGCONFIG += opencv Для установки OpenCV использовал opencv-4.7.0-windows.zip, скаченный с сайта OpenCV. В Path ничего не включал. |
Сообщ.
#4
,
|
|
|
Цитата tumanovalex @ -1: ошибка: Project ERROR: opencv development package not found Для установки OpenCV использовал opencv-4.7.0-windows.zip, скаченный с сайта OpenCV. В Path ничего не включал. Ну так не нужно - у тебя же есть MSYS2! Сноси ту либу, что скачал, и загрузи уже настроенный пакет из терминала MSYS2: Смотрим какие пакеты есть: pacman -sS opencv Инсталлируем нужный пакет (например, mingw64/mingw-w64-x86_64-opencv): pacman -S mingw64/mingw-w64-x86_64-opencv Ну а потом попробуй вариант с pkg-config. Правда, если ты в MSYS2 и pkg-config не ставил - поставь его по примеру выше для opencv. |
Сообщ.
#5
,
|
|
|
На всякий случай - я тут когда-то в FAQ по С/С++ статейку про MSYS2 написал, ознакомься, обновись.
|
Сообщ.
#6
,
|
|
|
Статью прочитал, спасибо. Как-то я забыл, что можно использовать Msys2. Сообщения pacman
mingw64/mingw-w64-x86_64-opencv 4.7.0-1 [installed] Open Source Computer Vision Library (mingw-w64) mingw64/mingw-w64-x86_64-pkgconf 1~1.8.0-2 (mingw-w64-x86_64-toolchain) [installed] pkg-config compatible utility which does not depend on glib QT -= gui CONFIG += c++17 console CONFIG -= app_bundle SOURCES += \ main.cpp INCLUDEPATH += D:/msys64/mingw64/include INCLUDEPATH += D:/msys64/mingw64/include/opencv4 INCLUDEPATH += D:/msys64/mingw64/lib LIBS += -LD:/msys64/mingw64/lib CONFIG += link_pkgconfig PKGCONFIG += opencv |
Сообщ.
#7
,
|
|
|
Попробуй вот тaк:
#include <iostream> #include <string> #include "opencv2/imgcodecs.hpp" int DisplayMessage(std::string sMes) { std::cout << sMes << std::endl; system("pause"); exit(EXIT_SUCCESS); } int main() { cv::Mat img = cv::imread("Access.jpg", cv::IMREAD_UNCHANGED); if(img.empty()) DisplayMessage("Image missing!"); cv::imwrite("result.jpg", img); DisplayMessage(""); } TEMPLATE = app CONFIG += console c++17 CONFIG -= app_bundle CONFIG -= qt CONFIG += link_pkgconfig PKGCONFIG += opencv4 SOURCES += \ main.cpp Обрати внимание: opencv4 |
Сообщ.
#8
,
|
|
|
Так получилось. Но будет ли возможность в программе на QT работать с OpenCV при параметре CONFIG -= qt?
|
Сообщ.
#9
,
|
|
|
Цитата tumanovalex @ Но будет ли возможность в программе на QT работать с OpenCV при параметре CONFIG -= qt? Не не не, если Qt нужно в работе - эту настройку нужно удалить. Я просто не заметил у тебя в коде использование Qt, ну и по привычке его отключил. |
Сообщ.
#10
,
|
|
|
Правильно ли я понимаю следующее:
1. CONFIG += link_pkgconfig - настраивает pkgconfig на поиск библиотек 2. Если прописать: PKGCONFIG += gtk4 PKGCONFIG += boost |
Сообщ.
#11
,
|
|
|
Да, все верно.
Добавлено Цитата tumanovalex @ CONFIG += link_pkgconfig - настраивает pkgconfig на поиск библиотек Если быть точнее - подключает использование pkgconfig. |
Сообщ.
#12
,
|
|
|
Цитата tumanovalex @ Т.е. можно создать проект, в котором можно использовать все самые мощные библиотеки C++? В этом и есть самая главная фишечка MSYS2 - этот проект предоставляет уже собранные и протестированные библиотеки, готовые к использованию, с условием использования там же предоставляемых тулчейнов. Ну а pkg-config - это некое подобие пакетного менеджера для C/C++. Не совсем полноценный, но все же хелпер. Желательно прочитать про него. Что касается Qt - то проекты в QtCreator'е вполне могут работать и без pkg-config, такова специфика QtCreator (по сути он для Qt и заточен). А вот для всего остального лучше использовать pkg-config. Еще раз см. его описание. |
Сообщ.
#13
,
|
|
|
Попытался совместить OpenCV и boost. Файл pro:
TEMPLATE = app TARGET = qtTestCons CONFIG += console c++17 CONFIG -= app_bundle #CONFIG -= qt INCLUDEPATH += D:/msys64/mingw64/include INCLUDEPATH += D:/msys64/mingw64/include/boost CONFIG += link_pkgconfig PKGCONFIG += opencv4 PKGCONFIG += boost SOURCES += \ main.cpp #include <iostream> #include <string> #include <boost/filesystem/operations.hpp> #include <opencv2/imgcodecs.hpp> int DisplayMessage(std::string sMes) { std::cout << sMes << std::endl; system("pause"); exit(EXIT_SUCCESS); } void TestBoost() { boost::filesystem::directory_iterator begin("./"); boost::filesystem::directory_iterator end; for (; begin != end; ++ begin) { boost::filesystem::file_status fs = boost::filesystem::status(*begin); { switch (fs.type()) { case boost::filesystem::regular_file: std::cout << "FILE "; break; case boost::filesystem::symlink_file: std::cout << "SYMLINK "; break; case boost::filesystem::directory_file: std::cout << "DIRECTORY "; break; default: std::cout << "OTHER "; break; } if (fs.permissions() & boost::filesystem::owner_write) { std::cout << "W "; } else { std::cout << " "; } std::cout << *begin << '\n'; } } } void TestQT() { cv::Mat img = cv::imread("Access.jpg", cv::IMREAD_UNCHANGED); if(img.empty()) DisplayMessage("Image missing!"); cv::imwrite("result.jpg", img); } int main() { TestQT(); TestBoost(); DisplayMessage(""); } mingw64/mingw-w64-x86_64-boost 1.81.0-4 [installed] Free peer-reviewed portable C++ source libraries (mingw-w64) Добавлено Я включил в файл проекта INCLUDEPATH, тогда заголовочные файлы можно указывать в <...>. OpenCV при этом работает. Как лучше делать - в ковычках или так? |
Сообщ.
#14
,
|
|
|
Проект прикрепил.
Прикреплённый файлqtTestCons.zip (16,2 Кбайт, скачиваний: 39) |
Сообщ.
#15
,
|
|
|
Цитата tumanovalex @ Получаю ошибку "Project ERROR: boost development package not found". Как эту ошибку исправить? Boost установлен Ок, давай по порядку ... По итогу меняем файл проекта вот на такое содержимое: TEMPLATE = app CONFIG += console c++17 CONFIG -= app_bundle LIBS += "-llibboost_filesystem-mt" CONFIG += link_pkgconfig PKGCONFIG += opencv4 SOURCES += \ main.cpp После этого проект должен собраться. Кстати, в MSYS2 используется GCC v.12.2.0 - а он полностью поддерживает С++20 (модули частично), и в нем уже давно есть в STL std::filesystem, начиная с С++17 ... буст не нужен |