当前位置: 首页 > news >正文

Ubuntu下交叉编译工业相机库aravis到OpenHarmony(aarch64)使用

文章目录

  • 下载交叉编译工具链
  • 安装meson
  • 编写交叉编译配置文件
  • 编译glib
  • 编译libiconv
  • 编译libxml2
  • 编译libusb(暂时不编译,依赖的udev库我找不到)
  • 编译Aravis
  • 使用

自行编译的库都统一放到一个地方去,这样引用时方便一些,比如我源码放到OpenHarmony这里,而编译后install的东西放到OpenHarmony/install这里
在这里插入图片描述

下载交叉编译工具链

我的目标设备是aarch64架构的,所以我下载这个交叉编译工具链
https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
在这里插入图片描述
解压后放在某个文件夹,并且将对应的路径添加到当前用户的.bashrc中,添加完后,还得记得source一下生效。

在这里插入图片描述
设置完之后,就可以直接通过aarch64-linux-gnu-xxx这样的方式来使用交叉编译工具了,方便。
在这里插入图片描述

安装meson

pip install meson

编写交叉编译配置文件

创建一个cross_aarch.txt,内容如下,后面有用。注意里面使用到的路径

#[constants]
#native_path =  'D:/harmonyOS/OpenHarmony/11/native'
#sysroot_path = 'D:/harmonyOS/OpenHarmony/11/native/sysroot'[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'[properties]
# 这个设置了也没生效
prefix = '/home/yong/Desktop/OpenHarmony/install'
include_directories = ['/home/yong/Desktop/OpenHarmony/install/include']
link_directories = ['/home/yong/Desktop/OpenHarmony/install/lib']
# 指定 pkg-config 的查找路径,貌似没用
#pkg_config_libdir = ['/home/yong/Desktop/OpenHarmony/install/lib/pkgconfig']# 编译glib时,这个组的内容都要注释掉
[built-in options]
c_args = ['-I/home/yong/Desktop/OpenHarmony/install/include']
c_link_args = ['-L/home/yong/Desktop/OpenHarmony/install/lib']
cpp_args = ['-I/home/yong/Desktop/OpenHarmony/install/include']
cpp_link_args = ['-L/home/yong/Desktop/OpenHarmony/install/lib'][binaries]
c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-g++'
ar = 'aarch64-linux-gnu-ar'
ld = 'aarch64-linux-gnu-ld'
objcopy = 'aarch64-linux-gnu-objcopy'
strip = 'aarch64-linux-gnu-strip'
pkg-config = 'pkg-config'

我的这个文件是放在’/home/yong/Desktop/OpenHarmony’这个路径下的,而其他需要编译的源码我也是解压后放这个文件夹,这就意味着后面每个需要用meson来构建的的库,在构建时都可以通过--cross-file ../cross_aarch64.txt来使用这个文件,就不用每个项目配一个了。
在这里插入图片描述

编译glib

下载glib
https://github.com/GNOME/glib/releases/tag/2.78.6
注意下载的glib不要太新,太新的话会报错(但是也不能低于2.59.1,因为meson是从这个版本才引入):

..\glib-2.85.1\meson.build:1:0: ERROR: Meson version is 0.59.2 but project requires >= 1.4.0

在这里插入图片描述
从aravis的meson.build文件,可以看到,大于等于2.52即可
在这里插入图片描述
下载后解压,并且将前面创建的文件拷贝到源码目录下
在这里插入图片描述

执行指令
--prefix指的是编译后的文件的安装路径,需要是绝对路径

meson setup --prefix=/home/yong/Desktop/OpenHarmony/install \
--cross-file ../cross_aarch64.txt builddir \
-Dlibmount=disabled \
-Dselinux=disabled  \
-Dtests=false \
-Dglib_debug=disabled \
-Dnls=disabled

在编译的过程中,会自动下载库;假如下载到一半的然后不下载的话,可能会报对应的子模块中的meson.build不存在,这时需要将子模块的文件夹删除在运行上述一遍指令。

等上面指令执行完,再执行下面指令

 ninja -C builddir/ninja -C builddir/ install

然后在指定的安装位置就得到了编译好的库了

编译libiconv

下载源码
https://www.gnu.org/software/libiconv/#TOCdownloading
在这里插入图片描述

./configure --prefix=/home/yong/Desktop/OpenHarmony/install --host=aarch64-linux-gnu
make
make install

编译libxml2

下载源码
https://github.com/GNOME/libxml2/releases/tag/v2.12.9
libxml2是用cmake构建的
在这里插入图片描述

在这里插入图片描述

添加之前编译的库的安装路径进来

CMAKE_INCLUDE_PATH 
CMAKE_LIBRARY_PATH

在这里插入图片描述
修改安装路径,取消LZMA
在这里插入图片描述
取消python
在这里插入图片描述

勾选Advanced,将以下参数填进去CMAKE_EXE_LINKER_FLAGS(具体路径要以你存放的路径为准)

-L/home/yong/Desktop/OpenHarmony/install/lib -lz -L/home/yong/Desktop/OpenHarmony/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/lib -lm

在这里插入图片描述
然后点击 Configure Generate
然后到build文件夹

make
make install

编译libusb(暂时不编译,依赖的udev库我找不到)

https://github.com/libusb/libusb/releases

因为用到sysroot中的libudev,因此需要指定一下搜索路径

./autogen.sh
./configure

至此,Aravis所依赖的第三方库(glib、libxml2、libiconv等)我们都已经下载源码、编译好后安装到了指定的文件夹。

编译Aravis

下载源码
【Aravis: A vision library for genicam based cameras 】
解压,然后cd 到源码位置

执行指令
将我们前面安装的库的路径告诉系统,不然pkg-config会去本机上面找,找出来的是不对的

export PKG_CONFIG_PATH="/home/yong/Desktop/OpenHarmony/install/lib/pkgconfig"

由于前面的libusb无法编译,只能先禁用aravis对usb设备的支持,也就是编译出来的库只能支持Gige相机

meson setup  builddir -Dviewer=disabled -Dgst-plugin=disabled -Ddocumentation=disabled  -Dusb=disabled -Dintrospection=disabled --cross-file ../cross_aarch64.txt --prefix='/home/yong/Desktop/OpenHarmony/install'

然后编译、安装

ninja -C builddir
ninja -C builddir install

在这里插入图片描述

使用

将整个install文件夹拷贝到Windows平台上,然后再DevEco Studio中使用即可。

在项目的CMakeLists.txt中增加以下代码

# aravis
set(ARAVIS_ROOT "D:/harmonyOS/aravis")
target_include_directories(entry PRIVATE "${ARAVIS_ROOT}/include")
target_include_directories(entry PRIVATE "${ARAVIS_ROOT}/include/aravis-0.8")
target_include_directories(entry PRIVATE "${ARAVIS_ROOT}/include/glib-2.0")
target_include_directories(entry PRIVATE "${ARAVIS_ROOT}/lib/glib-2.0/include")
target_link_directories(entry PRIVATE "${ARAVIS_ROOT}/lib")
target_link_libraries(entry PRIVATE aravis-0.8 xml2)

编译时会报错,说libaravis-0.8.so有问题啥的。
这是因为libaravis-0.8.so是个在linux下的软链接,在windows下可能会有问题。因此要先备份好原有的库(我这里直接在最后加了个横杠),然后拷贝libaravis-0.8.so.0.8.33,然后将其改为 libaravis-0.8.so
在这里插入图片描述

然后拷贝以下库到arm64-v8a下面,拷贝的时候不能直接拷贝对应名字的,而是要拷贝同样名字前缀但是体积最大的那个,拷贝到arm64-v8a中,再更改名字。不然你拷贝的是软链接,没用。
在这里插入图片描述

在这里插入图片描述
编译然后运行,报这个错误。
在这里插入图片描述
在Ubuntu上用readelf 看看

readelf -d libaravis-0.8.so.0.8.33

在这里插入图片描述

可以使用patchelf直接从文件上去掉

patchelf --replace-needed "/home/yong/Desktop/OpenHarmony/install/lib/libxml2.so" "libxml2.so" libaravis-0.8.so.0.8.33

在这里插入图片描述
把该放过来的文件都搞过来了,但是程序还是崩了,不知道为啥。
在这里插入图片描述
报这个错误

relocating failed: symbol not found. dso=/data/storage/el1/bundle/libs/arm64/libglib-2.0.so.0 s=strtoll_l use_vna_hash=1 van_hash=6969197

在这里插入图片描述


参考
【交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装】
【meson 创建交叉编译】
【meson交叉编译glib2.76】
【linux交叉编译libiconv】
【cmake 头文件 库文件 路径搜索 CMAKE_INCLUDE_PATH CMAKE_LIBRARY_PATH】
【在幽兰上编译libusb】

相关文章:

  • 广州网站制作哪家专业找资源
  • 中国建设银行吉林分行网站网页seo
  • 大学生一个人做网站软文云
  • 营口建设工程信息网站东莞网络推广系统
  • 微商网站制作营销网络是什么意思
  • 昌平网站制作高效统筹疫情防控和经济社会发展
  • GaussDB实例级自动备份策略:构建数据安全的“自动防护网”
  • 终止分区表变更操作时误删数据字典缓存导致MySQL崩溃分析
  • 卡萨帝发布AI深度科技:实现从守护生活到守护文明的升级
  • 人生笔记Real:记录生活点滴,守护珍贵记忆
  • MiniMax-M1混合MoE大语言模型(本地运行和私有化搭建)
  • 微服务思想与C++服务化框架
  • Hadoop之HDFS
  • DeepSeek在数据分析与科学计算中的革命性应用
  • 实战使用 Docker Compose 搭建 Redis Cluster 集群
  • 盖雅工场 2025 香港 SAP NOW 大会深度解析:AI 重构亚太劳动力管理数字化生态
  • Tauri(2.5.1)+Leptos(0.8.2)开发自用桌面小程序--DeepSeek辅助编程(俄罗斯方块)
  • 自用006
  • 单片机常用通信外设特点及通信方式对比表
  • Spark Streaming 与 Flink 实时数据处理方案对比与选型指南
  • QUdpScoket 组播实现及其中的踩坑点记录
  • 云原生与人工智能的融合:从弹性架构到智能运维的IT新范式
  • 华为云Flexus+DeepSeek征文 | 掌握高效开发:利用华为云ModelArts Studio在VS Code中配置Cline AI编程助手
  • [AI工具]Fish-speech部署教程(环境搭建记录)
  • spring boot项目整合百度翻译
  • 北斗导航 | 卫星载噪比(C/N₀)的定义与解析