arm交叉编译opencv-2.4.9的步骤以及出现的问题

linux环境:ubuntu16.04
交叉编译工具 arm-cortexa9-linux-gnueabi

(一)下载opencv2.4.9源码
下载地址:opencv

(二)配置编译环境
安装cmake cmake-qt-gui

(三)配置编译选项
打开cmake-gui
配置编译选项
在这里插入图片描述

在这里插入图片描述

Compilers选项中的C选择*-gcc
C++选择*-g++,要找到交叉编译工具链所在位置。
find program include
编译工具的库函数(lib)的位置
点Advanced
接下来是终极配置!!不按照以下配置必然会报错!!

去掉BUILD_OPENEXR
去掉BUILD_opencv_ocl
去掉WITH_1394
去掉WITH_CUDA
去掉WITH_GSTREAMER(没见到)
去掉WITH_GTK(没见到)
去掉WITH_LIBV4L(后边有v4l这个没用不要选)(没见到)
去掉WITH_OPENCL
去掉WITH_OPENEXR
去掉WITH_TIFF
在cmake-gui中去掉BUILD_opencv_apps这一项的钩钩!!!

勾上BUILD_JASPER
勾上BUILD_JPEG
勾上BUILD_PNG
勾上BUILD_ZLIB

CMAKE_C_FLAGS 设置为-O3 -fPIC
CMAKE_CXX_FLAGS 设置为-O3 -fPIC

CMAKE_MODULE_LINKER_FLAGS:STRING=-pthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -lrt
//注意,有些系统是如下配置,反正我的ubuntu14.04只能是使用上面的配置
(CMAKE_MODULE_LINKER_FLAGS:STRING=-lpthread -lrt
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt
-lpthread都改为-pthread)
注意,有时候还是会 出现错误此时
修改编译目录下的 CMakeCache.txt 文件:
找到 CMAKE_EE_LINKER_FLAGS:STRING 项:

190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING=’ ’

修改成以下:
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING= -pthread -lrt

(三).编译和安装
配置好后点generate
make
或者make -j8(八线程哦,快很多)
make install

(四).常见错误提示及解决方法

(1)错误1
Linking CXX shared library …/…/lib/libopencv_core.so
/opt/EmbedSky/4.4.6/lib/gcc/arm-embedsky-linux-gnueabi/4.4.6/…/…/…/…/arm-embedsky-linux-gnueabi/bin/ld: …/…/3rdparty/lib/libzlib.a(inflate.c.obj): relocation R_ARM_MOVW_ABS_NC against `a local symbol’ can not be used when making a shared object; recompile with -fPIC
…/…/3rdparty/lib/libzlib.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[2]: *** [lib/libopencv_core.so] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] 错误 2

解决方法1:
http://ask.csdn.net/questions/70191
最佳方法:
在cmake-gui 中配置
CMAKE_C_FLAGS 设置为-O3 -fPIC
CMAKE_CXX_FLAGS 设置为-O3 -fPIC

(2)错误2
…/…/lib/libopencv_core.so:对‘pthread_spin_init’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_unlock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_key_create’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_getspecific’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_lock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_destroy’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_once’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_trylock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_setspecific’未定义的引用

解决方法:
CMAKE_MODULE_LINKER_FLAGS:STRING=-pthread -lrt -ldl
CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -lrt
//注意,有些系统是如下配置,反正我的ubuntu14.04只能是使用上面的配置
(CMAKE_MODULE_LINKER_FLAGS:STRING=-lpthread -lrt
CMAKE_EXE_LINKER_FLAGS:STRING=-lpthread -lrt
-lpthread都改为-pthread)

错误3
Linking CXX executable …/…/bin/opencv_createsamples
…/…/lib/libopencv_core.so:对‘pthread_spin_init’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_unlock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_key_create’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_getspecific’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_lock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_destroy’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_once’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_spin_trylock’未定义的引用
…/…/lib/libopencv_core.so:对‘pthread_setspecific’未定义的引用
collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_createsamples] 错误 1
make[1]: *** [apps/haartraining/CMakeFiles/opencv_createsamples.dir/all] 错误 2
make: *** [all] 错误 2
尝试解决
google之
http://stackoverflow.com/questions/40246165/linking-issue-in-opencv-createsamples
使用以上解决方法
直接
make
然后
make clean
不行!!!!

提示假如不用可以不编译
Alternatively for you to continue you could disable building that if you are not using it.

终极解决方法!!
不编译这个apps模块!
在cmake-gui中去掉BUILD_opencv_apps这一项的钩钩!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与光同程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值