Я пытаюсь использовать OpenCV в своем приложении на основе Qt. Однако по какой-то причине я сталкиваюсь с ошибками связи.Неразрешенные символы: Qt и OpenCV
Я использую Qt 5.5.0, MSVC 12.0, OpenCV 3.0, Windows 7. Мой OpenCV распакован в папке C: \ opencv. Я не пытаюсь самостоятельно скомпилировать библиотеку, просто используя то, что было в пакете. Как показано в приведенном ниже коде, я связываюсь с библиотеками, расположенными в папке vc12.
Я удалил весь мой код и сделал это на самом деле основным для устранения неполадок, поэтому у меня есть стартер по умолчанию проект QtWidget (с пустым экраном), к которому я добавил одну строки:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core.hpp>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::Mat M;
}
MainWindow::~MainWindow()
{
delete ui;
}
Если Я комментирую единственную команду openCV (cv :: Mat M;), код компилируется и запускается. С помощью этой линии настоящего времени я получаю две нерешенных ошибки символа:
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "void __cdecl cv::fastFree(void *)" ([email protected]@@[email protected]) referenced in function "public: __cdecl cv::Mat::~Mat(void)" ([email protected]@@[email protected])
mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: void __cdecl cv::Mat::deallocate(void)" ([email protected]@[email protected]@QEAAXXZ) referenced in function "public: void __cdecl cv::Mat::release(void)" ([email protected]@[email protected]@QEAAXXZ)
Я пробовал различные способы для статической линковки библиотек OpenCV, но я получаю те же ошибки (я всегда чистый, повторно запустить QMAKE, а затем снова -строить проект для каждой попытки). Вот что мой .pro файл выглядит прямо сейчас (я в конечном итоге добавив всю статическую LIBS в надежде, что это поможет - это не так):
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = Test
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
win32:CONFIG(release, debug|release): LIBS += -LC:/opencv/build/x86/vc12/staticlib \
-lopencv_core300 \
-lopencv_highgui300 \
-lopencv_imgproc300 \
-lIlmImf \
-lippicvmt \
-llibjasper \
-llibjpeg \
-llibpng \
-llibtiff \
-llibwebp \
-lopencv_calib3d300 \
-lopencv_features2d300 \
-lopencv_flann300 \
-lopencv_hal300 \
-lopencv_imgcodecs300 \
-lopencv_ml300 \
-lopencv_objdetect300 \
-lopencv_photo300 \
-lopencv_shape300 \
-lopencv_stitching300 \
-lopencv_superres300 \
-lopencv_ts300 \
-lopencv_video300 \
-lopencv_videoio300 \
-lopencv_videostab300 \
-lzlib
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/opencv/build/x86/vc12/staticlib \
-lopencv_core300d \
-lopencv_highgui300d \
-lopencv_imgproc300d \
-lIlmImfd \
-lippicvmt \
-llibjasperd \
-llibjpegd \
-llibpngd \
-llibtiffd \
-llibwebpd \
-lopencv_calib3d300d \
-lopencv_features2d300d \
-lopencv_flann300d \
-lopencv_hal300d \
-lopencv_imgcodecs300d \
-lopencv_ml300d \
-lopencv_objdetect300d \
-lopencv_photo300d \
-lopencv_shape300d \
-lopencv_stitching300d \
-lopencv_superres300d \
-lopencv_ts300d \
-lopencv_video300d \
-lopencv_videoio300d \
-lopencv_videostab300d \
-lzlibd
INCLUDEPATH += C:/opencv/build/include/
DEPENDPATH += C:/opencv/build/include/
Есть ли что-то, в частности, я пропускаю о конфигурации? Я уверен, что базовый синтаксис (например, слэши и т. Д.) В порядке, так как мне удалось связать другую библиотеку в Qt Creator в другом проекте, но я буду более чем счастлив попробовать любые предложения на этом этапе.
Вы сами создали OpenCV? Если нет, то вы загрузили двоичный файл OpenCV, который точно соответствует используемому вами компилятору? Помните, что ** все ** двоичные файлы MSVC (Qt, ваш проект, библиотеки и т. Д.) Должны быть скомпилированы с использованием той же основной версии MSVC. –
Спасибо за предложения. Я использовал библиотеки как есть, сам их не строил. Тем не менее, я связываюсь с версией vc12. Я редактирую оригинальный вопрос, чтобы отразить это. – Ilya