opencv arm-linux交叉编译
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了opencv arm-linux交叉编译,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2653字,纯文字阅读大概需要4分钟。
内容图文
![opencv arm-linux交叉编译](/upload/InfoBanner/zyjiaocheng/963/535f677a0e2948fb8afb611751b40668.jpg)
opencv arm-linux交叉编译
opencv2.4.13
该版本按照opencv官方文档编译,提示CMAKE_MAKE_PROGRAM is not set
,或No CMAKE_CXX_COMPILER could be found
,原来是还需要g++编译器,文档漏掉了,参考这里。
apt-get install g++-arm-linux-gnueabihf
修改platform/linux/arm-gnueabi.toolchain.cmake,改为如下:
- set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version"),也就是去掉版本号。
- set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabi${FLOAT_ABI_SUFFIX}-gcc),也就是使用绝对路径,去掉后面的杠和版本号。当然编译器路径添加到PATH也行。
执行cmake:
cmake -DCMAKE_MAKE_PROGRAM:PATH=/usr/bin/make -DCMAKE_INSTALL_PREFIX=arm-install -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../..
CMAKE_MAKE_PROGRAM 指定绝对路径。CMAKE_INSTALL_PREFIX指定安装目录,目录下的lib就是我们要拷贝到arm上的库。
最后成功编译。
编译opencv测试程序
重命名安装目录/lib/pkgconfig下的opencv.pc为arm-opencv.pc,编辑文件,Name项改为arm-opencv.
修改/etc/bash.bashrc :
vim /etc/bash.bashrc
添加:opencv安装目录/lib/pkgconfig
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:arm-install/lib/pkgconfig
Export PKG_CONFIG_PATH
source /etc/bash.bashrc
测试程序:
#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
IplImage* image = cvLoadImage("test.png");
if(image == NULL)
{
cout<<"loud image fail"<<endl;
return -1;
}
cout<<""<<image->width<<endl;
cvReleaseImage(&image);
return 0;
}
编译:
/usr/bin/arm-linux-gnueabihf-g++ `pkg-config --cflags --libs arm-opencv` test.cpp -lpthread -lrt -o test
报错:undefined reference to
cvLoadImage',执行
pkg-config --cflags --libs arm-opencv`,显示路径没问题
最后调整命令顺序编译成功,真的坑。
/usr/bin/arm-linux-gnueabihf-g++ test.cpp -lpthread -lrt -o test `pkg-config --cflags --libs arm-opencv`
执行测试程序
报错:/usr/lib/libstdc++.so.6:version "GLIBCXX_3.4.21" not found
,在ubuntu上交叉编译工具目录下找到对应库替换即可,即/usr/arm-linux-gnueabihf/lib下找到libstdc++.so.6、libstdc++.so.6.0.21,拷贝到开发板/usr/lib目录下,执行测试程序,输出正确。
总结
交叉编译opencv很烦人,总会遇到各种各样的错误,有的人干脆直接在arm版上编译程序,省去很多麻烦,编译速度也不会很慢。之所以错误不断,是因为机器的各种库版本不尽相同,比如我们已经安装了linux版opencv,环境变量里也有了一些配置,arm版编译的时候可能就会链接错误,还有交叉编译工具、gcc、g++编译器版本等各种差别。相信如果在全新机器上编译,应该没这么多问题。最重要的一点,我们如果不理解各种操作所代表的含义,只是照搬网上的,出了问题第一时间又像无头苍蝇样的到处找答案,这样是很难搞通的,也不会有太多长进。理解各种命令的含义,执行命令报错知道检查相关的配置,学习编写makefile,才能彻底解决问题。
学习makefile,参考:Makefile教程,跟我一起写 Makefile.
内容总结
以上是互联网集市为您收集整理的opencv arm-linux交叉编译全部内容,希望文章能够帮你解决opencv arm-linux交叉编译所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。