使用海思的交叉编译器编译opencv的过程中遇到的问题

最近在学习Hi3559A,到移植opencv的时候需要使用交叉编译器重新编译opencv。遇到的问题与bug有点多,所以记录一下:

 

首先按照大神ltshan139的博客进行 https://blog.csdn.net/avideointerfaces/article/details/89477828

本博客主要记录与原博客中不同与编译出现bug的地方,请按原博客的顺序进行

首先在cmake中的时候可能会没有大神文章中说的CMAKE_EXE_LINKER_FLAGS 这一项,没有的话可以先略过,后面再config中加上即可。

在生成源码后,进行make,首先解决掉原文中作者提到的问题。找不到文件位置的可以find 或者在报错的地方会显示错误的文件的路径

 

问题一:

../../lib/libopencv_core.so:对‘pthread_mutexattr_destroy’未定义的引用
../../lib/libopencv_core.so:对‘pthread_key_create’未定义的引用
../../lib/libopencv_core.so:对‘pthread_getspecific’未定义的引用
../../lib/libopencv_core.so:对‘dlopen’未定义的引用
../../lib/libopencv_core.so:对‘pthread_mutex_trylock’未定义的引用
../../lib/libopencv_core.so:对‘pthread_key_delete’未定义的引用
../../lib/libopencv_core.so:对‘dlclose’未定义的引用
../../lib/libopencv_core.so:对‘dlsym’未定义的引用
../../lib/libopencv_core.so:对‘pthread_mutexattr_settype’未定义的引用
../../lib/libopencv_core.so:对‘pthread_setspecific’未定义的引用
../../lib/libopencv_core.so:对‘pthread_mutexattr_init’未定义的引用
collect2: error: ld returned 1 exit status
apps/version/CMakeFiles/opencv_version.dir/build.make:95: recipe for target 'bin/opencv_version' failed
make[2]: *** [bin/opencv_version] Error 1
CMakeFiles/Makefile2:8366: recipe for target 'apps/version/CMakeFiles/opencv_version.dir/all' failed
make[1]: *** [apps/version/CMakeFiles/opencv_version.dir/all] Error 2

此问题就是因为没有设置CMAKE_EXE_LINKER_FLAGS项造成的,所以首先我们要修改编译目录下面的CMakeCache.txt的文件,在文件中找到CMAKE_EXE_LINKER_FLAGS 这一项,改为

//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -ldl -lrt

问题二:

出现错误 “ libopencv_imgcodecs.so:对‘png_init_filter_functions_neon’未定义的引用 ”

根据   https://sourceforge.net/p/libpng/bugs/230/  所发的补丁文件进行文件的修改并重新make就可以解决。注意补丁中有两个文件,只需要修改pngpriv.h 就可以,所以可以删除掉文件中关于configure.ac的部分。

具体如何使用patch,网上资料很多可以自行查看

也可以手动修改。

打开/opencv-4.1.2/3rdparty/libpng/pngpriv.h

将130行起的

 #  if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
 131    defined(PNG_ALIGNED_MEMORY_SUPPORTED)

改为

#  if defined(PNG_ARM_NEON) && (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
    defined(PNG_ALIGNED_MEMORY_SUPPORTED)


问题三:

出现错误

/opencv_contrib/modules/xfeatures2d/src/boostdesc.cpp:653:37: fatal error: boostdesc_bgm.i: No such file or directory
           #include "boostdesc_bgm.i"
                                     ^
compilation terminated.
modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/build.make:91: recipe for target 'modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.obj' failed
make[2]: *** [modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/boostdesc.cpp.obj] Error 1

这是因为缺失的文件下载失败或者缺失,可以将一系列库文件复制到opencv_contrib/modules/xfeatures2d/src 中,即可解决,下载地址可以自行查找或在下载频道我有上传

https://download.csdn.net/download/qq_34533248/11804560

 

关于下面的warning问题,一般不影响使用,在网上有很多人的opencv出现了这个问题,解决方案很多。可以自行查阅

/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: ../../lib/libopencv_videoio.so, needed by ../../../../lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: ../../lib/libopencv_imgcodecs.so, needed by ../../../../lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by ../../../../lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: ../../lib/libopencv_core.so, needed by ../../../../lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/opt/hisi-linux/x86-arm/aarch64-himix100-linux/host_bin/../lib/gcc/aarch64-linux-gnu/6.3.0/../../../../aarch64-linux-gnu/bin/ld: warning: ../../lib/libopencv_objdetect.so, needed by ../../../../lib/libopencv_xobjdetect.so, not found (try using -rpath or -rpath-link)

总体来说还是比较顺利的,一般出现什么问题都可以比较方便的找到解决方案。记录一下只是怕自己下次自己用了还要重新查找错误原因。

你可能感兴趣的:(使用海思的交叉编译器编译opencv的过程中遇到的问题)