Ubuntu下交叉编译OpenCV(WITH_QT)

 主要是为了解决前面博客最后图片不能显示问题,所以博主决定沉下心来先把一些基础知识重新整理下,所以才有了前面五篇博客:

Ubuntu下的基本知识点(一)_jiugeshao的专栏-CSDN博客

Ubuntu下的基本知识点(二)_jiugeshao的专栏-CSDN博客

Ubuntu下源码编译OpenCV静态库及使用(勾选WITH_QT)_jiugeshao的专栏-CSDN博客

树莓派Tools交叉编译OpenGL(mesa-12.0.5)_jiugeshao的专栏-CSDN博客

Ubuntu下使用树莓派交叉编译工具编译QT(带OpenGL)及在树莓派上进行验证_jiugeshao的专栏-CSDN博客

在此基础上,博主继续做了多次尝试,终于解决了此问题。过程中也参考stack Overflow上的解决方法,然而并没有什么作用,其它的帖子大多都人云亦云,没有什么参考性。

python - OpenCV Error: Unspecified Error(The Function is not implemented) - Stack Overflow

博主解决此的方法就是带WITH_QT去交叉编译OpenCV

1. 既然要在交叉编译Opencv的时候去WITH_QT,那么引用的QT库得要让交叉编译工具能够识别到,所以第一步就是先交叉编译QT。过程见我前面博客Ubuntu下使用树莓派交叉编译工具编译QT(带opengl功能)_jiugeshao的专栏-CSDN博客

2.这边为了实验熟悉cmake的命令行编译方式,不同于我前面的博客

Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_jiugeshao的专栏-CSDN博客

这里使用如下命令来配置opencv

cmake -DCMAKE_CXX_COMPILER=/home/sxhlvye/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -DCMAKE_C_COMPILER=/home/sxhlvye/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc -DCMAKE_SYSTEM_NAME=raspberrypi -DCMAKE_FIND_ROOT_PATH=/home/sxhlvye/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf -DBUILD_CUDA_STUBS=OFF -DBUILD_DOCS=OFF -DBUILD_SHARED_LIBS= OFF -DBUILD_DOCS= OFF -DBUILD_FAT_JAVA_LIB= OFF -DBUILD_JAVA=OFF -DBUILD_TESTS= ON -DBUILD_PROTOBUF= ON -DBUILD_JASPER= OFF -DBUILD_JPEG= ON -DBUILD_PNG=ON -DBUILD_TIFF=ON -DBUILD_ZLIB= OFF -DWITH_CUDA= OFF -DCMAKE_BUILD_TYPE=Release -DOPENCL_FOUND=OFF -DWITH_OPENCL=OFF -DWITH_OPENCLAMDBLAS=OFF -DWITH_OPENCLAMDFFT=OFF -DWITH_OPENGL=ON -DWITH_OPENCL_SVM=OFF -DCMAKE_INSTALL_PREFIX=/home/sxhlvye/opencv-3.4.0/install_cross3 -DWITH_QT=ON -DQT_QMAKE_EXECUTABLE=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/bin/qmake -DQt5Concurrent_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5Concurrent -DQt5Core_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5Core -DQt5Gui_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5Gui -DQt5OpenGL_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5OpenGL -DQt5Test_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5Test -DQt5Widgets_DIR=/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib/cmake/Qt5Widgets ..

完毕后记得修改下CMakeCache.txt文件,将CMAKE_EXE_LINKER_FLAGS:STRING=修改为

CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -ldl -lrt 

前面的博客博客也做了这样的修改。

保存退出文件。

 然后执行make -j4

记得如果碰到报一些动态链接库needed by not found (try using -rpath or -rpath-link)问题,可以将提示找不到的动态库so文件拷贝到你的交叉编译环境下面。如果看过博主的系列博客,按照博主的路径来配置的,这里就可以放到树莓派Tools里这个文件夹里

/home/sxhlvye/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/lib

Ubuntu下交叉编译OpenCV(WITH_QT)_第1张图片

完毕后,执行make install进行安装。就能获得想要lib,include等文件

Ubuntu下交叉编译OpenCV(WITH_QT)_第2张图片

3.Opencv的环境配置

~/.bashrc中添加如下变量

export LD_LIBRARY_PATH=/home/sxhlvye/opencv-3.4.0/install_cross3/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=$LIBRARY_PATH:/home/sxhlvye/opencv-3.4.0/install_cross3/lib

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/sxhlvye/opencv-3.4.0/install_cross3/pkgconfig
export PKG_CONFIG_PATH 

完毕后别忘了执行source ~/.bashrc更新下

博主在前面的安装目录install_cross3下新建了一个pkgconfig目录,目录下又新建了一个opencv_ras.pc的文件

Ubuntu下交叉编译OpenCV(WITH_QT)_第3张图片

 文件中的内容如下:

# Package Information for pkg-config

prefix=/home/sxhlvye/opencv-3.4.0/install_cross3
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include
 
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.4.0
Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core -L${exec_prefix}/share/OpenCV/3rdparty/lib -llibprotobuf -llibjpeg -llibwebp -llibpng -llibtiff -llibjasper -lIlmImf -L/home/sxhlvye/qt-everywhere-opensource-src-5.5.1/install/lib -lQt5Core -lQt5Gui -lQt5Widgets -lQt5Test -lQt5Concurrent -L/home/sxhlvye/zlib-1.2.11/install/lib -lz -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

注意:这边我又交叉编译了zlib库,在上面的配置文件中将zlib库的lib文件也加入进去了。不然会报

undefined reference to `gzgets'问题。

 zlib Home Site 上可以下载zlib源码,交叉编译过程,通过命令语句进行即可完成编译。这里不再赘叙。新手可以参见我之前博客,里面有很多交叉编译的范例。


CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/zlib-1.2.11/install

4.参考Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_jiugeshao的专栏-CSDN博客中的第二步和第三步,还是继续拿里面的example.cpp进行测试。依然执行如下命令

arm-linux-gnueabihf-g++ -v example.cpp -o example_cross1.out $(pkg-config --cflags --libs opencv_ras)  -lpthread -lrt -ldl 

成功生成可执行文件。

Ubuntu下交叉编译OpenCV(WITH_QT)_第4张图片

5.将上面的tes_opencv拷贝到树莓派上。运行可执行文件,可以看到图片成功show出来了。

Ubuntu下交叉编译OpenCV(WITH_QT)_第5张图片

到此解决了之前博客Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_jiugeshao的专栏-CSDN博客

中图片不能show出来问题。

博主还是比较能耐得住性子的,确实花了好久把这个问题解决了,但过程中收获颇多!感谢坚持!

后面交叉编译这块就放放了,还是继续整树莓派上的一些程序小功能吧。

你可能感兴趣的:(嵌入式图像处理,qt,ubuntu,opencv)