在Ubuntu上利用loongarch64交叉编译工具编译opencv4.4.0
配置好loongarch64交叉编译工具环境,可以参考我之前写的【在Windows下利用LoongArch-toolchain交叉编译Qt】
安装好cmake、cmake-gui
下载opencv源码,
解压opencv源码
在源码的platforms/linux下,复制aarch64-gnu.toolchain .cmake
,将复制出来的文件更改名称为loongarch64-gnu.toolchain .cmake
然后更改其内容为:
(注意,主要就是更改GNU_MACHINE的内容,将其改成你的交叉编译工具所在的目录+一点前缀)
set(CMAKE_SYSTEM_PROCESSOR loongarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "/home/yong/Desktop/Loongnix/loongarch64-linux-gnu-rc1.6/bin/loongarch64-linux-gnu" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
然后参考【配置交叉编译环境@Ubuntu20.04+opencv4.7.0】,设置好必要的参数(在选择交叉编译配置文件时,记得要选择我们前面配好的loongarch64-gnu.toolchain .cmake
)
然后把不必要的选项都取消勾选,免得处理复杂的依赖关系以及不必要的编译时间。
记得勾选一下world,这样就把所编译的所有模块都编译成一个dll,这样用起来方便。
然后就是到build文件夹下常规操作了
make -j8
make install
创建sysroot
同步文件
创建sysroot,下面的操作都是参考【交叉编译Qt库】搞的
使用rsync
同步文件到到主机的sysroot中(要求本机和目标机器都安装了rsync, 可以使用这个命令安装apt install rsync
)
把目标设备和PC在一个局域网下,使用rsync目录同步文件,rsync将只复制更改的文件,对后面部署会节省大量时间。
在虚拟机上,创建sysroot目录,然后将文件同步下来
mkdir -p ~/sysroot/usr
mkdir -p ~/sysroot/lib
cd ~
rsync -avz --rsync-path="sudo rsync" --delete root@192.168.0.200:/lib sysroot/lib
rsync -avz --rsync-path="sudo rsync" --delete root@192.168.0.200:/usr/include sysroot/usr
rsync -avz --rsync-path="sudo rsync" --delete root@192.168.0.200:/usr/lib sysroot/usr
命令解释
rsync
用于远程或本地文件同步的工具,支持增量传输(仅传输变化的部分)。-avz
-a:归档模式(保留权限、符号链接等,相当于 -rlptgoD)。
-v: verbose(显示详细同步过程)。
-z:压缩传输(减少网络带宽占用)。--rsync-path="sudo rsync"
指定在远程设备上执行 rsync 时使用 sudo 提权(因为 /lib 是系统目录,普通用户可能无权直接读取)。
等效于在远程执行:
sudo rsync /lib ...--delete
删除本地 sysroot/lib 中不存在于远程 /lib 的文件(保持严格同步,避免残留旧文件)。
慎用:如果本地 sysroot/lib 有其他文件会被强制删除!cat@192.168.0.200:/lib
从远程设备(IP 192.168.0.200,用户 cat)的 /lib 目录同步数据。sysroot/lib
本地目标路径(将远程 /lib 同步到本地的 sysroot/lib 目录)。
根据实际设备ip,修改上面的192.168.0.200,假如用了不是默认端口,可以使用-e "ssh -p 2233"
来指定端口。
比如
rsync -avz -e "ssh -p 5678" --rsync-path="sudo rsync" --delete root@192.168.0.200:/usr/include sysroot/usr
消除软连接错误
rsync同步文件,有些软连接库是使用绝对路径,交叉编译时会出错。我们可以使用symlinks修改绝对路径为相对路径,
安装命令: sudo apt-get install symlinks
使用命令: symlinks -rc ~/sysroot
参考:
【配置交叉编译环境@Ubuntu20.04+opencv4.7.0】
【为树莓派4交叉编译QT5.14.2(带EGLFS支持)】
【交叉编译Qt库】