使用海思的交叉编译器编译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)

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

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要安装海思SDK的交叉编译,您可以按照以下步骤进行操作: 1. 首先,从海思官方网站(或相关渠道)下载SDK的安装包,通常是一个压缩文件。 2. 解压安装包到您选择的目录。您可以使用以下命令解压缩tar.gz文件: ```shell tar -xzvf <SDK安装包名称.tar.gz> ``` 3. 进入解压后的目录,并执行安装脚本。通常,该脚本的名称是`install.sh`或`setup.sh`,您可以使用以下命令执行脚本: ```shell cd <解压后的目录> sudo ./install.sh ``` 4. 在安装过程,您可能需要提供管理员权限(使用`sudo`命令)和同意许可协议。 5. 安装完成后,设置环境变量以便系统可以找到交叉编译。您可以编辑`~/.bashrc`文件,并添加以下行: ```shell export PATH=<交叉编译路径>:$PATH ``` 请将`<交叉编译路径>`替换为实际的路径,例如:`/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin`。 6. 保存并关闭文件后,使用以下命令使修改生效: ```shell source ~/.bashrc ``` 7. 现在,您应该能够在命令行使用交叉编译了。您可以验证是否成功安装和设置了交叉编译的环境变量,通过运行以下命令: ```shell arm-hisiv500-linux-gcc --version ``` 如果显示了交叉编译的版本信息,则表示安装成功。 请注意,这些步骤的具体命令和路径可能会根据您下载的SDK版本和安装包的结构略有不同。请仔细阅读SDK提供的安装说明,以确保正确地安装交叉编译

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值