看到很多人在小哪吒上编译Opencv,自己也尝试过编译了几次,各位开发者在编译的时候都可能会遇到不同的问题,现将其整理出来方便后面新来的开发者查阅。
理论上任何版本的Ubuntu都可以,在社区中有hu487364在Ubuntu14 中成功 见帖:编译Tengine D1 出错
aldfaaa的Ubuntu20.04中,见贴:Ubuntu20.04交叉编译OpenCV 4.5.2, 运行在Tina Linux
sudo apt install cmake-qt-gui
(小声bb)opencv的Relase版本更新还是挺快的,当然推荐大家使用最新的版本,这里就先贴上上一个版本了(前两天还是最新版本)
源码下载地址
下载源码后,放到虚拟机目录进行解压。然后进入opencv目录。
编译使用cmake-gui
打开cmake配置工具。
source 选择 opencv源码路径 build 选择编译路径(!注意不是安装路径)
然后点击
此处务必选择SDK中交叉编译链路径
# Operating system : Linux
# process : riscv
# C 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc
# C++ 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gc++
# Target root 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702
然后点击 FInish
打开Advancd选项, 设置了这些选项:
CMAKE_BUILD_TYPE Release
CMAKE_EXE_LINKER_FLAGS -ldl -lpthread -latomic
CMAKE_INSTALL_PREFIX ./install
关闭jpeg 和 openjpeg 选项。
搜索python 和 java --> 关闭所有相关的选项
关于 是否勾选 opencv_word 将其全部链接成一个静态库 此处就仁者见仁智者见智。。。看个人需求
我自己是勾上的 这样在链接的时候好链接
(1)/d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/sysroot/usr/include/features.h
的第364
行前 加 上
#define _FILE_OFFSET_BITS 64
(2) opencv/3rdparty/protobuf/src/google/protobuf/stubs/commen.cc
中增加一行
#define HAVE_PTHREAD
确认都配置好后
点击Configure —> Configuring done
点击Generate----->Generating done
如果两个都没有问题,此时就可以开始编译了
make -j8
这个错误是因为没有关上jpeg 暂时只能将这个包关掉做编译(类型错误,没有修正)
这个错误是没有在上面加 -latomic
如果以上都没有 ,你就可以顺利编译下来
然后你就可以在 install
目录下 看到我们交叉编译后的文件了
在移动到板子之前,我们需要将atimic (原子操作库) 移动到我们的lib 目录,因为 Tina 默认没有将原子库打包进固件内。
cd 到lib目录
# -d 和 * 可以保证其全部链接拿出来
cp -d ~/d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/riscv64-unknown-linux-gnu/lib64/lp64d/libatomic.so* .
然后就可以使用adb 将其 发送至开发板中。:face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: 即将完成!!
adb push lib\libopencv_world.so /lib
adb push lib\libatomic.so /lib
adb push lib\libatomic.so.1.2.0 /lib
adb push lib\libatomic.so.1 /lib
然后我们再将 bin 送入开发板
adb push bin /root
root@TinaLinux:~/bin# chmod +x *
root@TinaLinux:~/bin# ls
opencv_annotation opencv_visualisation
opencv_interactive-calibration setup_vars_opencv4.sh
opencv_version
root@TinaLinux:~/bin# ./opencv_version
4.5.1
可以看到我们的开发板已经打印了 opencv的版本号 :face_with_cowboy_hat: :face_with_cowboy_hat: 即将起飞。芜湖
我们在编译的过程中 关掉了 jpeg 的相关包,所以在 imwrite 等操作时 ,无法解析 jpg 文件会出现这样的报错:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.1) /home/jie/下载/opencv-4.5.1/modules/imgcodecs/src/loadsave.cpp:682: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'imwrite_'
原贴链接:https://bbs.aw-ol.com/topic/227/
全志在线开发者交流企鹅群(客服机器人24小时在线解答):498263967
资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com/
全志及开发者最新动态可以关注全志在线微信公众号