rk1108交叉编译opencv-3.4.6过程记录
- ubuntu16.04 x64系统,搭建好rk1108开发板的交叉编译环境,并设置交叉编译器环境变量。
- 下载压opencv-3.4.6.zip压缩包并解压,下载链接: https://github.com/opencv/opencv/releases/tag/3.4.6
- unzip opencv-3.4.6.zip
cd opencv-3.4.6
mkdir build
cmake-gui
使用cmake-gui进行设置,步骤如下,如下图1所示,选择生成Makefile的类型:
图1
如下图2所示,配置交叉编译器的路径,图中Operating System请务必填写Linux,设置完毕后,单击finish,结束编译器配置过程,出现图3所示界面。
图2
图3
依照以下图4,5,6,7片所示,进行配置项设置:
图4
图5 (安装路径设置,建议修改一下安装路径,参考上图5)
图6
图7
按照上述步骤,完成配置 - 编译opencv:make -j4
编译过程会出现如下error:
图8
解决方式如下:
vim ${HOME}/opencv-3.4.6/3rdparty/libpng/pngpriv.h
注释掉一行:
/*# if (defined(ARM_NEON) || defined(__ARM_NEON)) && \ */
并添加一行:
#if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) &&
修改完成后,继续执行:make -j4 知道编译完成。 - 安装opencv: sudo make install,安装完成后,可在安装路径看到如下库函数:
图9
注:之前交叉编译完成后,使用opencv时,总会报如下的警告:
warning: …/…/lib/libopencv_imgproc.so, needed by …/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
使用命令查看:readelf -d libopencv_imgproc.so | grep NEEDED
0x00000001 (NEEDED) 共享库:[…/…/lib/libopencv_core.so]
0x00000001 (NEEDED) 共享库:[libstdc++.so.6]
0x00000001 (NEEDED) 共享库:[libm.so.0]
0x00000001 (NEEDED) 共享库:[libgcc_s.so.1]
0x00000001 (NEEDED) 共享库:[libc.so.0]
尝试了多种编译方式,最终得以解决,具体解决办法:
需要保证在开始设置的时候 CMAKE_SYSTEM_NAME 是否被设置为Linux 若你的工程中未设置或设置为其它值,建议修改其为 Linux,即图2进行设置的时候,Operating System请务必填写Linux,设置后,完成编译。
使用命令查看: readelf -d libopencv_imgproc.so
Dynamic section at offset 0x310478 contains 33 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libopencv_core.so.3.4]
0x00000001 (NEEDED) Shared library: [libdl.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.1]
0x00000001 (NEEDED) Shared library: [librt.so.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libm.so.1]
0x00000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x00000001 (NEEDED) Shared library: [libc.so.1]
发现…/…/lib路径没有了,直接依赖当前文件夹下的文件。
交叉编译opencv时常用到,在此记录,给自己做个参考!