原文:http://blog.csdn.net/gatieme/article/details/49080355

项目需求,交叉编译OpenCV,并移植到arm中。

在opencv2.0以上的版本编译都要借助于cmake工具生成Makefile
2.0一下版本才是使用configure生成Makefile
请确保宿主机已经安装cmake和cmake-gui工具,如果请自行安装

sudo apt-get install cmake cmake-qt-gui  cmake-curses-gui

开发环境
开宿主机:Fedora9.0
交叉编译器:友善之臂arm-Linux-gcc4.4.3
自动化编译工具: cmake version 2.8.12.2

编译


下载opencv源代码

项目官网:http://opencv.org/
下载地址:http://opencv.org/downloads.html

源码我放置在自己目录的/opencv/opev3.0.0-src
期望的构建目录在/opencv/opencv3-build
期望的安装目录是/opt/arm/opencv/opencv3-arm

cmake配置生成makefile


运行cmake的图形化工具cmake-gui

sudo cmake-gui
  • 1
  • 1


选择源代码目录/opencv/opev3.0.0-src
选择Build目录/opencv/opencv3-build,大家根据自己设置配置编译目录

点击Configure或者Generator
选择Unix Makefiles,
接着选择Specify options for cross-compiling,


点击Next,接着开始配置交叉编译环境的信息

Operating System填写arm-inux
C Compilers填写您交叉编译器arm-linux-gcc命令的地址
C++ Compilers填写arm-linux-g++的地址

程序库的Target Root填写交叉编译器的bin目录,

然后点击Finish,您的配置信息就出来的

注意默认的安装路径为 修改默认配置,默认安装目录为/usr/local
但是我们交叉编译的来说并不合适,这样会替换我们宿主机上原有的库,
所以我把CMAKE_INSTALL_PREFIX变量改为/opt/arm/opencv/opencv3-arm

好了最后点击Configure进行配置,然后点击Gennerate就会生成Makefile

make编译并且安装

sudo make
sudo make install 
  • 1
  • 2
  • 1
  • 2

出现问题


我们刚才的配置其实肯定是有问题的,因为一堆依赖库没有配置链接参数,但是我们又不知道需要哪些库,所以我们只能等待出现问题进行解决。

pthread


报错

Linking CXX executable ../../bin/opencv_test_calib3d
../../lib/libopencv_core.so: undefined reference to `pthread_key_create'
../../lib/libopencv_core.so: undefined reference to `pthread_getspecific'
../../lib/libopencv_ts.so: undefined reference to `pthread_key_delete'
../../lib/libopencv_core.so: undefined reference to `pthread_once'
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_core.so: undefined reference to `pthread_setspecific'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

很明显是pthread的库,

解决

修改/opt/opencv3-build目录下的CMakeCache.txt
CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt

dlfcn


问题

undefined reference to `dlerror'
undefined reference to `dlopen'
  • 1
  • 2
  • 1
  • 2

解决

CMAKE_EXE_LINKER_FLAGS继续加上-ldl

parallel_pthreads_set_threads_num

问题

undefined reference to `dlerror'
undefined reference to `dlopen'
  • 1
  • 2
  • 1
  • 2
Linking CXX executable ../../bin/opencv_perf_core
../../lib/libopencv_core.so: undefined reference to `parallel_pthreads_set_threads_num(int)'
../../lib/libopencv_core.so: undefined reference to `parallel_pthreads_get_threads_num()'
../../lib/libopencv_core.so: undefined reference to `parallel_for_pthreads(cv::Range const&, cv::ParallelLoopBody const&, double)'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

解决

这个是编译工具链的问题,解决了快一天
后来重要找到了解决方案Fixed compilation of pthread-based parallel_for with gcc 4.4.3

修改modules/core/src/parallel.cpp,自132行开始添加7处删除5处(+表示要添加,-表示要删除)

 namespace cv{ParallelLoopBody::~ParallelLoopBody() {}
+#if defined HAVE_PTHREADS && HAVE_PTHREADS
+    void parallel_for_pthreads(const cv::Range& range, const cv::ParallelLoopBody& body, double nstripes);
+    size_t parallel_pthreads_get_threads_num();
+    void parallel_pthreads_set_threads_num(int num);
+#endif}+namespace{#ifdef CV_PARALLEL_FRAMEWORK@@ -301,7 +307,7 @@ void cv::parallel_for_(const cv::Range& range, const cv::ParallelLoopBody& body,}#elif defined HAVE_PTHREADS
-        void parallel_for_pthreads(const Range& range, const ParallelLoopBody& body, double nstripes);
+parallel_for_pthreads(range, body, nstripes);#else@@ -361,8 +367,6 @@ int cv::getNumThreads(void)#elif defined HAVE_PTHREADS-        size_t parallel_pthreads_get_threads_num();
-return parallel_pthreads_get_threads_num();#else@@ -424,8 +428,6 @@ void cv::setNumThreads( int threads )#elif defined HAVE_PTHREADS-    void parallel_pthreads_set_threads_num(int num);
-parallel_pthreads_set_threads_num(threads);#endif

交叉编译并移植opencv3.0.0到arm板相关推荐

  1. opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译

    opencv-3.4.3 交叉编译并且移植到高通820开发板(包括Qt 5.11.2部分交叉编译及移植),NEON OpenCV编译 原文我是用有道笔记记录的,下面排版不是很好,可参看有道笔记原文:h ...

  2. 【OpenCV3】Opencv3.2.0在Hisi3521下的交叉编译和移植

    说明:hisi3521交叉编译工具arm-hisiv300-linux已经配置完成,cmake已经安装. 1.      从官网(https://github.com/opencv/opencv/ar ...

  3. 移植OpenHarmony 3.0到ARM单片机

    9月30日,OpenHarmony 3.0 LTS版本发布. 本文将介绍如何移植OpenHarmony 3.0到星空派开发板上. 1. 星空派开发板介绍 星空派(GD)开发板是由旗点科技推出的一款GD ...

  4. opencv3.4.0移植到齐感QG2101平台

    1. 下载opencv3.4.0源码 下载opencv3.4.0 Linux版本源码,下载地址如下: https://github.com/opencv/opencv/archive/3.4.0.zi ...

  5. opencv3.1.0 交叉编译 H3516a

    之前编译过opencv2.4.9 交叉编译 H3516a 但是因为时间比较久远. 今天突然说要跑跟踪的代码. 顿时蒙了.不知道该要怎么办.我记性向来不好. 所以用此贴来记录一下今天opencv3.1. ...

  6. mysql 客户端 交叉编译_移植mysql到嵌入式ARM平台

    移植MySQL到嵌入式ARM平台 MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.ph ...

  7. opencv 全志_Banana Pi 开发板-【BPI-M2 Berry试用】论opencv3.3.0编译的那些坑(非成功版)-电路城论坛 - 电子工程师学习交流园地...

    这是一张吐槽贴和碰壁贴,要教程的可以看看我另一片帖子: https://www.cirmall.com/bbs/thread-97291-1-1.html复制代码虽然是3.2.0,而且是树莓派的,但编 ...

  8. Qt——用在ARM板上的Mplayer(1.3.0,1.0rc4)安装编译步骤!还有,Mplayer背景抖动闪烁问题解答,终于来了!

    注意:若转载,请贴上链接"https://blog.csdn.net/qq_41042595/article/details/112308184",如若发现抄袭或未标明来源现象,都 ...

  9. 移植U-boot-1.2.0到S3C2410

    前段时间移植了vivi-0.1.4,也对源代码进行了解析学习.原本的想法是给vivi增加tftp功能,那么就需要写cs8900a驱动(我用的网卡芯片是CS8900A-CQ3Z),然后呢实现tftp协议 ...

最新文章

  1. arm服务器配置信息,ARM板 web服务器交叉编译及配置
  2. 2012最炙手可热的10项IT技术——相对应的技术书
  3. 通过设计绿色数据中心寻求循环经济
  4. 《阿凡达》2020再度观看观后感
  5. IPFS:Filecoin和复制证明
  6. SpringMVC整合MongoDB
  7. Laravel数据库迁移和填充(支持中文)
  8. 如果你正在使用CocoaPods,你的.gitignore会有什么?
  9. php arsort函数,php-常用函数
  10. [Remoting]在.NET環境實作Flex 3 Remoting - (2) Flex Builder 環境設定
  11. JQuery Mobile Popup窗口定位
  12. 引入神策埋点数据事件分析
  13. linux解压war包命令改配置文件脚本,自动解压war包,并替换胚子和文件,重启tomcat,实现自动化部署。...
  14. 全国计算机等级考试怎么保存,全国计算机等级考试一级备考:Word文档保存为PDF文件...
  15. 文本信息过滤中的变体词识别(一)
  16. Detached InstanceError:Instance is not bound to a Session 关闭session后使用SQLAlchemy对象
  17. 摄影测量学空间后方交会
  18. 使用js定时器实现倒计时功能
  19. UltraEdit 下载|UltraEdit破解版下载|UltraEdit 注册码
  20. ABAP中CA CS CO用法

热门文章

  1. php 动态输出图片尺寸,高并发下 php 输出图像对性能开销大不大?
  2. linux 屏幕输出 高亮_如何设置SecureCRT窗口输出代码关键字高亮设置
  3. php mysql 多行查找_PHP使用mysqli同时执行多条sql查询语句的实例
  4. s()++php,jquery siblings()函数正确用法
  5. 三星r381android+wear,三星新路线图:Android Wear手表/Tizen手机
  6. 两台oracle怎样定期导表数据,定期从Oracle导数据至MySQL
  7. 完善的仿京东电商开源项目
  8. 皮一皮:不能太自信。。。
  9. Java中的微信支付(2):API V3 微信平台证书的获取与刷新
  10. Python 获 Mozilla 和扎克伯格夫妇 40 余万美金资助