Cross compile OpenCV to a RaspberryPI
-
@hamzaelazizi Try this (add it to your pro file):
LIBS += -L/usr/lib/arm-linux-gnueabihf -lm
@jsulm yes i changed the path to the one i have and it worked but it then started showing these different errors :
undefined reference to cv::imshow
undefined reference to cv::imread
undefined reference to cv::wait
undefined reference to cv::Mat -
here's my .pro file code :
TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt INCLUDEPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 #DEPENDPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 QT_CONFIG -= no-pkg-config LIBS += `pkg-config --cflags --libs opencv4` LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm #CONFIG += link_pkgconfig #PKGCONFIG += opencv4 SOURCES += \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /home/pi/$${TARGET} !isEmpty(target.path): INSTALLS += target
and here's my main c++ code :
#include <opencv2/highgui.hpp> int main() { cv::Mat img = cv::imread("/home/pi/Pictures/drake.jpg"); cv::imshow("Window",img); cv::waitKey(0); return 0; }
-
here's my .pro file code :
TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt INCLUDEPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 #DEPENDPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 QT_CONFIG -= no-pkg-config LIBS += `pkg-config --cflags --libs opencv4` LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm #CONFIG += link_pkgconfig #PKGCONFIG += opencv4 SOURCES += \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /home/pi/$${TARGET} !isEmpty(target.path): INSTALLS += target
and here's my main c++ code :
#include <opencv2/highgui.hpp> int main() { cv::Mat img = cv::imread("/home/pi/Pictures/drake.jpg"); cv::imshow("Window",img); cv::waitKey(0); return 0; }
@hamzaelazizi said in Cross compile OpenCV to a RaspberryPI:
LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm
While you await @jsulm who actually knows something about this...!
I believe you are saying:
- without
-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
, although it cannot find the-lm
library, you do not get errorsundefined reference to cv::...
, right? - with
-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
, it finds the math library, but you do get errorsundefined reference to cv::...
, right?
In that case, by putting
/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
high on the library directory search list thecv::...
stuff it also needs is no longer found, because it must find some differentcv
library archives (in that specified directory) instead of what it used to find, and those libraries do not include something which would resolve those references.What you do/are supposed to do with that I do not know.....
UPDATE
Oh, maybe not. Those "undefined"s may always have been there. But when it cannot resolve the-lm
on the link line it will stop there and won't get as far as the final step of linkage where it would notice undefineds. So the-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
may be nothing to do with the "undefined"s....You might start by running
pkg-config --cflags --libs opencv4
in a terminal, to at least see what that is producing. E.g. if that is not even outputting any library paths to put into yourLIBS
it's not right.... - without
-
here's my .pro file code :
TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt INCLUDEPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 #DEPENDPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4 QT_CONFIG -= no-pkg-config LIBS += `pkg-config --cflags --libs opencv4` LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm #CONFIG += link_pkgconfig #PKGCONFIG += opencv4 SOURCES += \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /home/pi/$${TARGET} !isEmpty(target.path): INSTALLS += target
and here's my main c++ code :
#include <opencv2/highgui.hpp> int main() { cv::Mat img = cv::imread("/home/pi/Pictures/drake.jpg"); cv::imshow("Window",img); cv::waitKey(0); return 0; }
@hamzaelazizi said in Cross compile OpenCV to a RaspberryPI:
INCLUDEPATH += /home/rnsaoberon/rpi-qt/sysroot/usr/local/include/opencv4
Please change all these paths!
You do NOT have to put the path of your sysroot!
It should look like this:INCLUDEPATH += /usr/local/include/opencv4
Also, why /usr/local?! I doubt OpenCV packages from your OS install anything in /usr/local! Please fix this!
"LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm" - this is also not what I suggested! Why do you add sysroot path everywhere?
LIBS += -L/usr/lib/arm-linux-gnueabihf -lm
The errors you posted mean that OpenCV libs are not found. If you really install OpenCV using your OS packet manager on your RaspberryPi the libs should be somewhere in /usr/lib and it should be enough to add -lLIBNAME to pro file.
-
@hamzaelazizi said in Cross compile OpenCV to a RaspberryPI:
LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf -lm
While you await @jsulm who actually knows something about this...!
I believe you are saying:
- without
-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
, although it cannot find the-lm
library, you do not get errorsundefined reference to cv::...
, right? - with
-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
, it finds the math library, but you do get errorsundefined reference to cv::...
, right?
In that case, by putting
/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
high on the library directory search list thecv::...
stuff it also needs is no longer found, because it must find some differentcv
library archives (in that specified directory) instead of what it used to find, and those libraries do not include something which would resolve those references.What you do/are supposed to do with that I do not know.....
UPDATE
Oh, maybe not. Those "undefined"s may always have been there. But when it cannot resolve the-lm
on the link line it will stop there and won't get as far as the final step of linkage where it would notice undefineds. So the-L/home/rnsaoberon/rpi-qt/sysroot/usr/lib/arm-linux-gnueabihf
may be nothing to do with the "undefined"s....You might start by running
pkg-config --cflags --libs opencv4
in a terminal, to at least see what that is producing. E.g. if that is not even outputting any library paths to put into yourLIBS
it's not right....@JonB i think i have got it to work, and i'm still in shock...
i added this code in .pro file : LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
Apparently, Qt Creator wasn't able to find the libraries necessary for the application, so when i asked it to add them, it worked !
Tho, i'm sure i'll encounter more problems in the near futur, but that's enouh errors for one day.
i still have one question which is irrelevant to this topic : How can i use Qt to work with a thermal camera that uses SPI(GPIO) protocol to communicate. a FLIR Lepton thermal camera to be specific, Thank you ! - without
-
@JonB i think i have got it to work, and i'm still in shock...
i added this code in .pro file : LIBS += -L/home/rnsaoberon/rpi-qt/sysroot/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
Apparently, Qt Creator wasn't able to find the libraries necessary for the application, so when i asked it to add them, it worked !
Tho, i'm sure i'll encounter more problems in the near futur, but that's enouh errors for one day.
i still have one question which is irrelevant to this topic : How can i use Qt to work with a thermal camera that uses SPI(GPIO) protocol to communicate. a FLIR Lepton thermal camera to be specific, Thank you !@hamzaelazizi said in Cross compile OpenCV to a RaspberryPI:
Apparently, Qt Creator wasn't able to find the libraries necessary for the application
Well, you have to tell the build system (not QtCreator) which libs your app needs, there is no magic.
Please also consider my previous post. -
@hamzaelazizi said in Cross compile OpenCV to a RaspberryPI:
Apparently, Qt Creator wasn't able to find the libraries necessary for the application
Well, you have to tell the build system (not QtCreator) which libs your app needs, there is no magic.
Please also consider my previous post.@jsulm Thank you for your time and effort, sir ! much appreciated