opencv库 arm-linux交叉编译并移植

el/2024/2/25 22:50:59

目录

静态链接库与动态链接库

opencv arm-linux交叉编译并移植


动态链接库与动态链接库

参考网址:https://www.jianshu.com/p/dbe848e4ad0d
多个文件生成动态/静态库的用法:

动态库:

1.gcc -fPIC -shared xxx1.c xxx2.c xxx3.c -o libxxx.so 
2.gcc -fPIC -shared xxx1.o xxx2.o xxx3.o -o libxxx.so 

静态库:

ar -rc libxxx.a xxx1.o xxx2.o xxx3.o

opencv arm-linux交叉编译并移植

参考博客:https://blog.csdn.net/spiremoon/article/details/105923235

Qt下代码的移植方法一(动态链接):

  1. 交叉编译opencv
  2. 生成opencv.pc【注意opencv.pc中包含的路径要与自己交叉编译得到的动态库位置保持一致】,此目的是告知编译器去依次链接哪些需要的动态库,这样一来就不需要手动指定需要哪些动态库了(参考博客:https://blog.csdn.net/s15810751918/article/details/107705387)
  3. 在Qt项目中指定需要包含的动态库(参考博客:https://blog.csdn.net/qq_24338077/article/details/54754740)
  4. 若在Qt中编译通过,则下一步就是将opencv交叉编译得到的动态库移植到arm开发板中
  5. 将交叉编译的opencv库用tar命令打包移植到arm开发板中(路径最好与主机上opencv动态库的路径名称一致),然后tar zxvf解压
  6. 将QT的可执行文件移植到arm开发板中
  7. 重复一下2

将第三方共享库添加至系统

方法一:

1.qt项目工程的opecv的lib路径应该为移植的嵌入式Linux中的opecv的动态库路径2.在移植的嵌入式Linux平台下设置LD_LIBRARY_PATH变量使其包含opecv的动态库的路径
然而该方法在本项目中未能成功

方法二:需要到的.so文件:制到系统默认的链接库路径中

1.opecv的动态库移植到目标板上的嵌入式linux的usr/lib下
2.在项目工程中添加需要用到的库(本地主机上的相对路径也要有需要的opencv动态库)LIBS += -L/usr/lib\-lopencv_highgui \-lopencv_imgproc \-lopencv_videoio \-lopencv_imgcodecs\-lopencv_core
3.INCLUDEPATH += /usr/local/include

方法三:

1.sudo vi /etc/ld.so.conf.d/opencv.conf
2.在文件里写上库文件路径:/usr/local/lib/
2.sudo ldconfig
然而该方法在本项目中未能成功

方法四:

1.sudo vi bash.bashrc
2.PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/opencv/install_opencv/lib/pkgconfig
2.export PKG_CONFIG_PATH

sudo cp -d libopencv_core libopencv_highgui libopencv_imgproc /usr/local/arm/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib

总结

在移植之前多看相关博客,列出方案再进行移植。


http://www.ngui.cc/el/3882149.html

相关文章

列表中的一些命令

如何取出列表中第一个和最后一个元素 切片 1 names=["Xieningxuan","Huanglongjian","Changbingbing","Lifanlin","Fanlong","Zhangchi"] 2 print(names[0]) #列表中是第一个元素的位置是0, 也就是在列表中是…

八种数据类型详解——int篇

整数型在java中整数形式有四种表示形式: byte 1字节 -128————127 short 2字节 int 4字节 2147483647是int最大值,超了就用long long 8字节 最常用的是int 1字节=8比特 (8个二进制位) 在java 在任何情况下整数型的“字面量”默认被当作int类型处理 如果希望该“整数形…

textarea标签使用placeholder属性添加提示文字,页面却不显示

1.原因&#xff1a; 标签之间有空格 2.正确写法及错误写法&#xff1a; ①正确&#xff1a; <textarea type"text" name"message" placeholder"请输入留言内容"></textarea> ②错误&#xff1a; 2.1<textarea type"te…

微信小程序换行符、hidden属性、图片高度、背景图不显示问题

微信小程序问题总结 1. 换行符\n 1.1 微信小程序的换行符为\n,只能在text标签中使用&#xff0c;才能进行换行 1.2 当后端返回数据中存在换行符\n&#xff0c;并且在text标签中仍不进行换行显示&#xff0c;&#xff08;原因是后端返回的\n被转译成了字符串无法识别为换行符&a…

MatLab 2016b下载资源

MatLab 2016b下载资源 百度网盘链接: https://pan.baidu.com/s/1cc_qWaiLWl7O6e0O-xZjpg 提取码&#xff1a;6yei

并发控制(笔记)

并发控制 在单处理机系统中&#xff0c;事务的并发执行实际上是这些并行的事务的并行操作轮流交叉执行。 并发控制概述 事务是并发控制的基本单位 但是并发操作会出现以下一些问题。 1.丢失修改 2.不可重复读 3.读脏数据 &#xff08;与数据库内容不一致&#xff09; …

数据库恢复技术(笔记)

数据库恢复技术 1.事务 所谓事务是用户定义的一个数据库操作序列&#xff0c;这些操作要全做&#xff0c;要不全都不做&#xff0c;是一个不可分割的工作单位。 事务通常以BEGIN TRANSACTION开始&#xff0c;以commit或者是rollback结束&#xff0c; commit 表示提交&#xf…

查找的基本概念(笔记)

1.查找表 查找表是由同一类型的数据元素&#xff08;或记录&#xff09;构成的集合。 2.关键字 关键字是数据元素&#xff08;或记录&#xff09;中某个数据项的值。用它可以标识一个数据元素&#xff08;或记录&#xff09;。若此关键字可以唯一标识一个记录&#xff0c;则称此…

插入排序、冒泡排序、选择排序、快速排序(笔记+代码)

插入排序、冒泡排序、选择排序、快速排序 1.插入排序 插入排序&#xff0c;其实就像打牌一样&#xff0c;每一次从未添加数列中&#xff08;牌堆&#xff09;里面选取最近的一个关键字&#xff08;数&#xff09;&#xff0c;将这个数插入到已添加数列&#xff08;手牌&#…

数据库原理期末复习

第一章 绪论 知识点 1.什么是数据库&#xff1f; 数据库是长期储存在计算机内&#xff0c;有组织&#xff0c;可共享的大量数据的集合。数据库中的数据按照一定的数据模型组织&#xff0c;描述和存储&#xff0c;具有较小冗余度&#xff0c;较高的独立性和易扩展性&#xff0…