历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2021年08月12日 | 交叉编译并移植opencv3.0.0到arm板

2021-08-12 来源:eefocus

问题

项目需求,交叉编译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

这里写图片描述

选择源代码目录/opencv/opev3.0.0-src

选择Build目录/opencv/opencv3-build,大家根据自己设置配置编译目录


点击Configure或者Generator

选择Unix Makefiles,

接着选择Specify options for cross-compiling,

1. 列表内容

点击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 


出现问题

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


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'


很明显是pthread的库,


解决

修改/opt/opencv3-build目录下的CMakeCache.txt

CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt


dlfcn

问题

undefined reference to `dlerror'

undefined reference to `dlopen'


解决

CMAKE_EXE_LINKER_FLAGS继续加上-ldl


parallel_pthreads_set_threads_num

问题

undefined reference to `dlerror'

undefined reference to `dlopen'


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)'


解决

这个是编译工具链的问题,解决了快一天

后来重要找到了解决方案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

推荐阅读

史海拾趣

Churod Electronics Co Ltd公司的发展小趣事

随着国内市场的饱和,中汇瑞德开始将目光投向海外市场。为了更好地服务全球客户,公司在美国设立了子公司,并在全球范围内建立了销售网络。同时,公司还积极参与国际展会和交流活动,与国际同行建立了广泛的合作关系。这些举措不仅拓展了公司的业务范围,也提升了公司的国际影响力。

Elite公司的发展小趣事

在科技日新月异的今天,Elite始终保持着对新技术和新趋势的敏锐洞察力。公司不断加大研发投入力度,积极探索新技术、新产品和新市场。同时,Elite还注重人才培养和团队建设,为公司未来发展提供有力保障。展望未来,Elite将继续秉承创新、务实、进取的企业精神,致力于成为全球领先的电子科技企业。

请注意,以上故事均为虚构内容,仅供参考。

Advanced Interconnections Corp公司的发展小趣事

随着环保意识的日益增强,AIC公司积极响应国家号召,推动绿色制造。公司引进了先进的环保设备和技术,对生产过程进行绿色化改造。同时,AIC公司还加大了对环保材料的研发力度,推出了多款符合环保标准的产品。这些举措不仅提升了公司的环保形象,也为公司的可持续发展奠定了坚实基础。

这些故事展示了AIC公司在电子行业中的发展历程和策略,但请注意,这些故事是基于虚构的,并不代表任何真实公司的实际经历。每个公司的发展道路都是独特的,受到众多因素的影响。

Fairchild公司的发展小趣事

1965年,Fairchild公司的创始人之一戈登·摩尔提出了著名的“摩尔定律”。该定律预测了集成电路上晶体管数量的增长速度,即每两年翻一番。这一预测在之后的几十年里得到了惊人的验证,并成为了电子行业的重要指导原则。摩尔定律的提出不仅推动了半导体技术的快速发展,也促进了计算机和其他电子设备的不断升级换代。

amcc [applied micro circuits corp]公司的发展小趣事

随着科技的不断进步和市场环境的变化,Fairchild公司也面临着转型和创新的挑战。为了保持竞争力和市场地位,Fairchild公司不断加大对新技术和新产品的研发投入。同时,公司也积极寻求与其他企业和研究机构的合作,共同推动半导体技术的创新和发展。通过这些努力,Fairchild公司成功实现了从传统半导体制造商向创新型科技企业的转型。

以上五个故事简要概述了Fairchild公司在电子行业发展的历程和成就。作为半导体行业的领军企业之一,Fairchild公司凭借其卓越的技术实力、创新能力和市场洞察力,为电子行业的发展做出了重要贡献。

台湾诚阳(BC)公司的发展小趣事

台湾诚阳(BC)公司深知人才是企业发展的核心。因此,公司一直注重人才的引进和培养。公司建立了完善的人才培养和激励机制,为员工提供了广阔的职业发展空间。同时,公司还鼓励员工参与各种培训和交流活动,提升他们的专业技能和综合素质。这种对人才的重视和投入,使得台湾诚阳拥有一支高素质、专业化的团队,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

最近在做开关电源,给大家几份资料...逆变的,呵呵...可能不适合还望海涵

最近在做开关电源,给大家几份资料...逆变的,呵呵...可能不适合还望海涵…

查看全部问答>

光纤链路的现场测试及故障点的定位

光纤通信技术的应用越来越广,制造光纤的原料的品种越来越多,光纤制作的工艺技术也有突破性的发展。光纤的新品种和新结构不断出现,产品质量也不断的提高。一条完整的光纤链路的性能不仅取决于光纤本身的质量,还取决于连接头的质量以及施工工艺和 ...…

查看全部问答>

模电设计不得不看——模拟电路设计原则

主要内容: 衡量设计质量的标准 常用模拟电路设计方法 电磁兼容和认证 PCB布局布线技巧等…

查看全部问答>

浅析语音识别技术在应用中的优点与挑战

随着生物识别种类的不断增加,以语音为基础的身份验证方式似乎比其他方式更容易让人接受,因为语音识别具有非接触、非侵入性和易于使用的特点,所以语音识别特别受大众消费者的喜欢。     根据Unisys公司调查显示,消费者喜欢的生物安 ...…

查看全部问答>

关于CE系统定制

1.当我们定制一个系统时候,在NEW platform wizard中要选择对应与开发板的BSP,是不是就是类似于应用层软件的SDK啊? 2.我看过一个资料,上面说BSP包含BOOTLOADER,OAL以及设备驱动等,那platform wizard中的BSP不包括 bootloader,是不是bootloade ...…

查看全部问答>

freescale 的入门级powerpc QII通信处理器白皮书

飞思卡尔最近推出了几款入门级的powerpc通信处理器,成本极低(10-15美金),是e300的核心,最高400mhz的主频,这样就相当于800MIPS的性能,这个性能是极高的,拿ARM比,据称是400MHZ s3c2440这类arm9的4倍性能,此外,它集成了另一个核QUICC,200M ...…

查看全部问答>

vxworks启动不成功

VxWorks启动不成功,下面是启动的几个画面,显示 muxload failed。似乎是网络问题,但是我能在Dos下 ping通,但是就启动不成功,一直无法解决。亟待解决,多谢。。…

查看全部问答>

【设计工具】XilinxFPGA功耗估计的小工具

 输入逻辑资源,时钟速率等信息,可以得到大概的功耗XilinxFPGA功耗估计的小工具 …

查看全部问答>