Я пытаюсь создать приложение с использованием OpenCV и QT, работая на основе создателя QT. Я использовал эту комбинацию в Visual Studio в прошлом без каких-либо проблем, но я начал использовать рабочую станцию Linux в качестве основного окна разработки, поэтому перешел на QTCreator в качестве IDE.
Приложение получает данные по сети и отображает некоторые из них в виде изображения; все остальное работает нормально и проверено; это просто показывает изображение, которое вызывает проблему. Ошибка сборки возникает, когда я вызываю imshow
:
Mat image = Mat(1944, 2592, CV_16U, (void*)images[imgCount].data());
imshow("disp", image);
И вывод сборки выглядит следующим образом (я сократил некоторые пути к файлам):
g++ -c -pipe -g -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I../RasPiRawImageReceiverTest -I. -isystem /usr/local/include/opencv4 -isystem /usr/include/qt -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o main.o ../RasPiRawImageReceiverTest/main.cpp
g++ -c -pipe -g -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I../RasPiRawImageReceiverTest -I. -isystem /usr/local/include/opencv4 -isystem /usr/include/qt -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o receiver.o ../RasPiRawImageReceiverTest/receiver.cpp
g++ -pipe -g -std=gnu++11 -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/qt/mkspecs/features/data/dummy.cpp
/usr/bin/moc -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB --include moc_predefs.h -I/usr/lib/qt/mkspecs/linux-g++ -I/QtCreatorProjects/RasPiRawImageReceiverTest -I/usr/local/include/opencv4 -I/usr/include/qt -I/usr/include/qt/QtNetwork -I/usr/include/qt/QtCore -I. -I/usr/include/c++/9.2.1 -I/usr/include/c++/9.2.1/x86_64-pc-linux-gnu -I/usr/include/c++/9.2.1/backward -I/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.1/include -I/usr/local/include -I/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.1/include-fixed -I/usr/include ../receiver.h -o moc_receiver.cpp
g++ -c -pipe -g -std=gnu++11 -Wall -Wextra -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I../RasPiRawImageReceiverTest -I. -isystem /usr/local/include/opencv4 -isystem /usr/include/qt -isystem /usr/include/qt/QtNetwork -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++ -o moc_receiver.o moc_receiver.cpp
main.cpp: In function ‘int main(int, char**)’:
main.cpp:9:15: warning: unused variable ‘r’ [-Wunused-variable]
9 | Receiver* r = new Receiver();
| ^
g++ -o RasPiRawImageReceiverTest main.o receiver.o moc_receiver.o -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_videoio -lopencv_imgcodecs -lopencv_flann /usr/lib/libQt5Network.so /usr/lib/libQt5Core.so -lpthread
/usr/bin/ld: receiver.o: in function `Receiver::dataReady()':
receiver.cpp:52: undefined reference to `imshow(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
make: *** [Makefile:228: RasPiRawImageReceiverTest] Error 1
12:03:02: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project RasPiRawImageReceiverTest (kit: Desktop)
When executing step "Make"
OpenCV был составлен из стабильных исходных файлов 4.2.0, загружаемых с веб-сайта OpenCV и использующих конфигурацию CMake по умолчанию. QT 5.14.1 устанавливается из репозиториев Manjaro.
Из того, что я могу сказать, это несоответствие стандарту C ++, но, насколько я могу судить, и OpenCV, и приложение компилируются с C ++ 11. Файл QT .pro содержит строку CONFIG += c++11
. Другие функции OpenCV работают; это просто кажется из того, что я проверял. Я знаю, что в сборке есть и другие предупреждения, но на данный момент это не проблема.
Редактировать: .pro выглядит так:
QT -= gui
QT += network
CONFIG += c++11 console
CONFIG -= app_bundle
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
receiver.cpp
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
HEADERS += \
receiver.h
INCLUDEPATH += \
/usr/local/include/opencv4
/usr/local/include
LIBS += \
-L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_videoio -lopencv_imgcodecs -lopencv_flann