交叉编译并移植opencv3.0.0到arm板

发布者:InnovateMind最新更新时间:2021-08-12 来源: eefocus关键字:交叉编译  移植  opencv3  arm板 手机看文章 扫描二维码
随时随地手机看文章

问题

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

关键字:交叉编译  移植  opencv3  arm板 引用地址:交叉编译并移植opencv3.0.0到arm板

上一篇:s3c2410上搭建QT/Embedded4.8.5开发环境(六)--QtCreate的配置
下一篇:mount nfs常见出错信息总结

推荐阅读最新更新时间:2024-11-01 10:10

μC/OS-II在PC机上移植的设计与实现
1 引言 μC/OS-II是专门为嵌入式系统应用而设计的嵌入式实时操作系统,人们在学习μC/OS-II时,一开始往往在基于PC机的DOS或 Windows环境下进行分析与研究。在这种环境中,带有μC/OS-II内核的应用系统(简称μC/OS-II应用系统)的运行,让人觉得它好像是一个 DOS程序,人们无法真实地领略实时操作系统的面貌。实际上,在PC机的DOS或Windows环境中,μC/OS-II应用系统确实是一个DOS可执行程序,它的运行离不开DOS或Windows环境。为了让更多的人掌握和理解μC/OS-II实时操作系统,笔者对μC/OS-II进行移植,使其完全脱离DOS或Windows环境而运行。首先设计Bootload
[嵌入式]
分析uboot移植第一阶段的各种代码
一直uboot的过程: 1. 选择是什么架构的单片机或者平台 在总的make file 里面 2. 更改时钟配置 3. 更改串口相关的时钟配置 4. 选用适当的norflash 5.选用适当的nandflash 1. 100ask24x0_config : unconfig @(MKCONFIG)(MKCONFIG)(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0 其中 第一个参数 ARM 表示的是架构是什么架构 我们这里的架构是ARM架构 第二个参数是 什么CPU 这里是 Arm920t的CPU 第三个参数是什么开发板:这里是 100ask24x0的开发板 第四个参数是
[单片机]
ARM核心之--电平转换电路(上)
  电子工程师在电路设计过程中,经常会碰到处理器MCU的I/O电平与模块的I/O电平不相同的问题,为了保证两者的正常通信,需要进行电平转换。以下,我们将针对电平转换电路做出详细的分析。   对于多数MCU,其引脚基本上是CMOS结构,因此输入电压范围是:高电平不低于0.7VCC,低电平不高于0.3VCC。   但在介绍电平转换电路之前,我们需要先来了解以下几点:   1.解决电平转换问题,最根本的就是要解决电平的兼容问题,而电平兼容原则有两条:①VOH VIH ②VOL        图1 阈值电压   2.对于多电源系统,某些器件不允许输入电平超过电源电压,针对有类似要求的器件,电路上应适当做些保护。   3.电平转换电路会影
[电源管理]
<font color='red'>ARM</font>核心<font color='red'>板</font>之--电平转换电路(上)
基于μC/OS-II操作系统在SPCE061A上的移植优化研究
SPCE061A是凌阳科技新推出的u课SP内核的十六位单片机,内嵌32K字 Flash的SPCE061A时是适用于数字语音识别应用领域的一种经济的选择。它支持精简指令系统,片内具有丰富的硬件资源。只需设计少量的片外扩展电路即可实现应用系统的硬件功能要求。μC/OS-II是一个源代码公开的精简的实时性很强的操作系统内核,移植性强,基于μC/OS-II来设计系统可以提高系统软件开发的效率。将μC/OS-II移植到SPCE061A上,在μC/OS-II的平台上设计软件对于提高相关嵌入式应用系统产品的质量,减少开发周期和降低成本方面有着重要的意义。 基于SPCE061A的硬件最小系统的设计 SPCE061A的系统结构 SPCE
[单片机]
基于μC/OS-II操作系统在SPCE061A上的<font color='red'>移植</font>优化研究
arm交叉编译环境搭建
arm交叉编译环境搭建 今天搭建了一个基于arm的嵌入式开发环境,特记录搭建过程及其中遇到的问题。 一:准备 1、使用的软件版本 kernel:(http://www.kernel.org/pub/linux/kernel/v2.4/) linux-2.4.21.tar.gz (patch下载地址:ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/) patch-2.4.21-rmk1.gz binutils:(ftp://ftp.gnu.org/gnu/binutils) binutils-2.14.tar.gz gcc:(ftp://ftp.gnu.org/gnu/g
[单片机]
如何将ThreadX移植到STM32H7平台
前面我们将ThreadX成功移植到了STM32F4平台,但这只是我们的部分应用。我们希望将ThreadX的优势发挥到我们的更多应用中,所以在这一篇中我们就来实现将ThreadX移植到STM32H7平台中。 1、前期准备   在开始将ThreadX移植到STM32H7平台之前,我们需要做一些软硬件方面的准备。   首先,我们需要准备STM32H7的硬件平台。这次我们采用STM32H750VBT6为控制单元来作为目标平台。这是一款我们在实际项目中使用的,经过验证的,硬件能够稳定运行的平台。   其次,我们需要准备相应的软件资源,也就是ThreadX的源码。ThreadX的源码已经开源到Github上,其地址为: , /
[单片机]
如何将ThreadX<font color='red'>移植</font>到STM32H7平台
u-boot移植(十三)---代码修改---支持文件系统及补丁制作
一、烧写文件系统 1.1 jffs2烧写   1.下载文件系统:tftp 30000000 fs_mini_mdev.jffs2      2.擦除文件的块:nand erase.part rootfs      3.烧入文件系统:nand write.jffs2 30000000 0x00260000 5b89a8      4.设置启动参数:set bootargs console=ttySAC0 root=/dev/mtdblock3 rootfstype=jffs2      5.重新启动      这个需要先烧写内核。 1.2 yaffs烧写   1.下载文件系统:tftp 30000000 fs_mini_m
[单片机]
u-boot<font color='red'>移植</font>(十三)---代码修改---支持文件系统及补丁制作
ARM 开发 与 PC机ubuntu系统 nfs 挂载
ARM开发板与PC通过NFS 网络文件系统挂接,很方便文件的移动,也为我们的开发带来了方便。接下来,我就详细的介绍下如何建立ARM与PC机的挂接。 我是用的UBuntu系统。 首先,我们需要在主机上安装nfs服务器,安装过的过程中一并把一些需要的组件也给安装了。 1. 安装 NFS 相关组件 sudo apt-get install nfs-kernel-server 安装完nfs服务器之后,我们需要建立一个与下位机挂接的共享文件夹。 2. 建立NFS共享文件夹 sudo mkdir -R /mnt/nfs 3.设置共享目录 修改主机 /etc/exports 文件,添加如下代码 /mnt/nfs *(
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved