【软件工具安装使用】opencv交叉编译

前言

 首先需要将第三方库在PC端使用交叉编译器进行编译,在PC端编译要运行的程序的时候,需要将PC端的include和lib链接上,根据PC端的第三方库的目录修改CMakeLists.txt;

环境准备

 

编译配置

 

opencv交叉编译

 

 

opencv_contrib交叉编译

 

编译完成之后,用到的第三方库,需要使用export将路径加载到/etc/profile文件中,记得source;在嵌入式板子上,需要将交叉编译的第三方库的include和lib等文件复制到板子上,同时使用export将其添加到板子的环境变量中,使得程序运行的时候能够连接上即可;对于TDA4板子,如何写concerto.mak;编译环境路径 和 板子运行环境路径不必一致,只要能够链接上即可,需要export库文件的环境变量;

example:

# dynamic lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/3rdlib/facedetectionlib/lib:/opt/3rdlib/aarch64opencvlib/lib
# static lib
export LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/3rdlib/facedetectionlib/lib:/opt/3rdlib/aarch64opencvlib/lib
# g++ head file
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/opt/3rdlib/facedetectionlib/inlcude/facedetection/:/opt/3rdlib/aarch64opencvlib/include
# gcc head file
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/opt/3rdlib/facedetectionlib/inlcude/facedetection/:/opt/3rdlib/aarch64opencvlib/include

 

问题

1. 对‘png_do_expand_palette_rgba8_neon’未定义的引用

若出现3rdparty/lib/liblibpng.a(pngrtran.c.o):在函数‘png_do_read_transformations’中:pngrtran.c:(.text.png_do_read_transformations+0x16cc):对‘png_do_expand_palette_rgba8_neon’未定义的引用

解决方法: OpenCv4.x + opencv_contrib-4.x交叉编译_weixin_44715387的博客-CSDN博客

vi 3rdparty/libpng/CMakeLists.txt  # 最前面添加以下两个set;
set(ARM 1)
set(ENABLE_NEON 1)

2. 编译过程中断出错;

aarch64-none-linux-gnu-g++: fatal error: Killed signal terminated program cc1plus
 查阅相关信息后,认为是虚拟机内存不足造成的。通过创建swap分区解决了这个问题,编译成功。
解决方法:增加内存;增加swap交换空间;减少进程数量(make -j4);
## SWAP分区的创建与激活
# 创建分区路径
sudo mkdir -p /var/cache/swap/
# 设置分区的大小
# bs=64M是块大小,count=64是块数量,所以swap空间大小是bs*count=4096MB=4GB
sudo dd if=/dev/zero of=/var/cache/swap/swap0 bs=64M count=64
# 设置该目录权限
sudo chmod 0600 /var/cache/swap/swap0
# 创建SWAP文件
sudo mkswap /var/cache/swap/swap0
# 激活SWAP文件
sudo swapon /var/cache/swap/swap0
# 查看SWAP信息是否正确
sudo swapon -s  # swap0文件的路径在/var/cache/swap/下,编译完后, 如果不想要交换分区了, 可以删除。

## 删除交换分区
sudo swapoff /var/cache/swap/swap0
sudo rm /var/cache/swap/swap0

## 释放空间
sudo swapoff -a
#详细的用法:swapoff --help
#查看当前内存使用情况:free -m
View Code

3. JPEG问题

/opencv-4.7.0/modules/imgcodecs/src/loadsave.cpp:692: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'imwrite_
 应该是交叉编译库文件的时候,没有选择JPEG选项,所以不能保存jpg格式,改为png格式就可以了;

4. cvWaitKey/GTK问题

what():  OpenCV(4.7.0) /home/ubuntu1804vm/workspace/utils/opencv/opencv-4.7.0/modules/highgui/src/window.cpp:1338: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvWaitKey'
选择GTK_2选项进行编译,还是出现同样的错误,什么原因呢?????
猜测可能是TDA4不支持,因为可能需要用到X11库,而TDA4不支持X11;

 

参考

 

 

posted on 2023-08-03 18:24  鹅要长大  阅读(73)  评论(0编辑  收藏  举报

导航