ubuntu版本号: Ubuntu 18.04.5 LTS
opencv版本号:opencv-3.4.1
opencv3.4.1下载链接:opencv-3.4.1相关库-C 文档类资源-CSDN下载
在opencv3.4.1下创建build,并创建arm-himix410-linux.cmake文件;粘贴以下内容; set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_SYSTEM_PROCESSOR arm ) set( CMAKE_C_COMPILER arm-himix410-linux-gcc ) set( CMAKE_CXX_COMPILER arm-himix410-linux-g )
具体工具链名称自行;
cmake -D CMAKE_BUILD_TYPE=Release \ -D CMAKE_INSTALL_PREFIX=../output \ -D CMAKE_C_COMPILER=arm-himix410-linux-gcc \ -D BUILD_SHARED_LIBS=ON \ -D BUILD_ZLIB=ON \ -D WITH_ITT=OFF \ -D BUILD_opencv_highgui=ON \ -D ZLIB_INCLUDE_DIR=../3rdparty/zlib ../
其中:BUILD_SHARED_LIBS动态库是否可以控制;BUILD_opencv_highgui控制是否生成opencv-highgui.so库;
make -j8
这个过程可能会遇到一些错误,每个虚拟机的编译结果都不一样;
:undefined reference to `__itt_api_version_ptr__3_0' 解决: -D WITH_ITT=OFF \
:opencv undefined reference to `jpeg_CreateCompress'
原因:缺少jpeg库; 并需要 -ljpeg 链接;
编译: ./configure CC=arm-himix410-linux-gcc --prefix=/usr/local/jpegsrc.v8c/install --host=arm-linux
:Unable to locate package libjasper-dev, 就是和jasper库相关的, 网上说apt-get installlibjasper-dev类似的;甚至下载jasper不能交叉编译开源库;
解决: 加上LIBS = -L/usr/local/opencv-3.4.1/output/share/OpenCV/3rdparty/lib
分析: 编译生成output库路下有一些库!
:undefined reference to `TIFFWriteDirectory'
原因: 和tiff库相关, 并链接 -ltiff; 虽然上面output/share/OpenCV/3rdparty/lib路径下有,但还是报错了,只有三方库的交叉编译;
编译tiff-4.0.4库,依赖与zlib和jpeg库;
./configure CC=arm-himix410-linux-gcc \ CXX=arm-himix410-linux-g \ --prefix=$(pwd)/install \ --host=arm-linux \ --with-zlib-include-dir=/usr/local/zlib-1.2.3/install/include \ --with-zlib-lib-dir=/usr/local/zlib-1.2.3/install/lib \ --with-jpeg-include-dir=/usr/local/jpeg-8c/install/include \ --with-jpeg-lib-dir=/usr/local/jpeg-8c/install/lib
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/tiff-4.4.0/install/lib/pkgconfig
还有其他错误没有完全记录...
INCLUDEPATH = $$(PWD)/include \ $$(PWD)/include/opencv2 \ $$(PWD)/include/opencv INCLUDEPATH = /usr/local/jpeg-8c/install/include INCLUDEPATH = /usr/local/tiff-4.4.0/install/include INCLUDEPATH = /usr/local/opencv-3.4.1/output/include LIBS = -L$$(PWD)/lib #包括海思相关库 LIBS = -L/usr/local/opencv-3.4.1/output/share/OpenCV/3rdparty/lib LIBS = -L/usr/local/jpeg-8c/install/lib LIBS = -L/usr/local/tiff-4.4.0/install/lib LIBS = -L/usr/local/opencv-3.4.1/output/lib LIBS = -lmpi -live -lupvqe -ldnvqe -lVoiceEngine -lsecurec -fopenmp -lQtNetwork -lQtCore -lpthread -ldl #hisi LIBS = -lopencv_ml \ -lopencv_objdetect \ -lopencv_shape \ -lopencv_stitching \ -lopencv_superres \ -lopencv_videostab \ -lopencv_calib3d \ -lopencv_videoio \ -lopencv_imgcodecs \ -lopencv_features2d \ -lopencv_video \ -lopencv_photo \ -lopencv_imgproc \ -lopencv_flann \ -lopencv_core LIBS = -llibjasper -llibtiff -ltiff -lzlib -ljpeg -lavcodec -lavformat -lavutil -lswscale -lm -lrt
编译过程参考了很多网上博客,不贴,记录编译过程;
只有一个改变其他版本opencv库,从低版到高版等;
编译只是第一步, 在重新编译之前,也可能需要添加一些东西来犯错误;
动态库需要自己部署带板/lib软链接;
补充1:以下两个警告,虽然没有报错,但是很不爽;
(a) warning: libopencv_highgui.so.3.4, needed by /usr/local/opencv-3.4.1/output/lib/libopencv_stitching.so, not found (try using -rpath or -rpath-link)
(b) warning: libz.so.1, needed by /usr/local/tiff-4.4.0/install/lib/libtiff.so, not found (try using -rpath or -rpath-link)
翻译是:libopencv_highgui.so.3.4, 被xxlibopencv_stitching.so需要,not found ;明明链接了库...
-lopencv_highgui \ -lopencv_stitching在lopencv_stitching前面添加上lopencv_highgui就ok了,或许是依赖的原因把;
同理: libtiff.so需要libz.so.1;
交叉编译了三方库:zlib-1.2.3
LIBS += -L/usr/local/zlib-1.2.3/install/lib
同时在ltiff前链接-lz:
LIBS += -lz -llibjasper -llibtiff -ltiff