编译环境:ubuntu-22.04 编译工具 :meson,autoconf,ninja
一、编译工具
1.添加交叉编译工具链
vi ~/.bashrc
export PATH=/home/ubuntu/RK3588/aarch64-rockchip1031-linux-gnu/bin:$PATH
source ~/.bashrc
2.autoconf,libtool,texinfo(缺少makeinfo)
sudo apt update
sudo apt install libtool
sudo apt install autoconf
sudo apt install texinfo
3.meson-1.4.0
python3 setup.py build
sudo python3 setup.py install
报错缺少setuptools
sudo apt install python3-setuptools
4.ninja
使用清华源下载快捷
sudo python3 -m pip install ninja --index-url https://pypi.tuna.tsinghua.edu.cn/simple
二、编译
理论上来说,使用meson交叉编译的时候,会自动下载所需要的依赖库,而不需要对某些库进行编译。但实际情况下,下载依赖库的时候可能需要科学上网进行,以及会报错缺失某些库的头文件等情况。meson构建的gstreamer包含了base、good、bad等插件。
1.直接编译gstreamer-1.22.0
1)下载gstreamer-1.22.0
tar -xvf gstreamer-1.22.0.tar.gz
cd gstreamer-1.22.0
2)编写meson所需构建aarch64.txt文件
[paths]
prefix='/home/ubuntu/RK3588/usr'
[binaries]
c='aarch64-rockchip1031-linux-gnu-gcc'
cpp='aarch64-rockchip1031-linux-gnu-g++'
ar='aarch64-rockchip1031-linux-gnu-ar'
strip='aarch64-rockchip1031-linux-gnu-strip'
pkgconfig='/usr/bin/pkg-config'
[host_machine]
system='linux'
cpu_family='aarch64'
cpu='aarch64'
endian='little'
3)编译
meson --cross-file aarch64.txt -Dgtk_doc=disabled -Dtests=disabled -Dexamples=disabled build
cd build
ninja && ninja install
2.从依赖库编译开始
如果直接使用meson进行构建失败,例如可能会报错找不到zlib.h头文件等,可预先编译几个依赖库(暂时只找到这个解决办法)。博主只编译了zlib和expat两个库就编译成功,其余库可看情况自行选择,一般来说主要先编译libffi,zlib,glib,expat即可正常完成。
1).编译libffi-3.4.2
tar -xvf libffi-3.4.2.tar.gz
cd libffi-3.4.2/
./autogen.sh
CC=aarch64-rockchip1031-linux-gnu-gcc ./configure \
--prefix=/home/ubuntu/RK3588/usr \
--host=aarch64-rockchip1031-linux-gnu --enable-shared
make -j16
make install
2).编译zlib-1.2.11
tar -xvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
CC=aarch64-rockchip1031-linux-gnu-gcc ./configure \
--prefix=/home/ubuntu/RK3588/usr --enable-shared
make -j16
make install
3).编译glib-2.74.1
(1)解压文件
tar -xvf glib-2.74.1.tar.gz
cd glib-2.74.1/
(2).编写meson所需构建文件aarch64.txt
[paths]
prefix='/home/ubuntu/RK3588/usr'
[binaries]
c='aarch64-rockchip1031-linux-gnu-gcc'
cpp='aarch64-rockchip1031-linux-gnu-g++'
ar='aarch64-rockchip1031-linux-gnu-ar'
strip='aarch64-rockchip1031-linux-gnu-strip'
pkgconfig='/usr/bin/pkg-config'
[host_machine]
system='linux'
cpu_family='aarch64'
cpu='aarch64'
endian='little'
(3).配置glib依赖库环境,glib依赖libffi、zlib
export PKG_CONFIG_LIBDIR=/home/ubuntu/RK3588/usr/lib/pkgconfig
(4)构建
meson --cross-file aarch64.txt \
-Dselinux=false -Dinstalled_tests=false -Ddtrace=false\
-Dsystemtap=false -Dselinux=disabled -Dlibmount=disabled\
build
cd build
ninja && ninja install
4).编译expat-2.4.7
tar -xvf expat-2.4.7.tar.gz
cd expat-2.4.7/
(2)编译
./configure --prefix=/home/ubuntu/RK3588/usr \
--host=aarch64-rockchip1031-linux-gnu \
CC=aarch64-rockchip1031-linux-gnu-gcc \
CXX=aarch64-rockchip1031-linux-gnu-g++
make -j16
make install
5).编译gstreamer-1.22.0
(1).下载解压
tar -xvf gstreamer-1.22.0.tar.gz
cd gstreamer-1.22.0
(2).使用上面构建的aarch64.txt文件,配置依赖包环境
export PKG_CONFIG_PATH=/home/ubuntu/RK3588/usr/lib/pkgconfig
(3).构建
meson --cross-file aarch64.txt -Dgtk_doc=disabled -Dtests=disabled -Dexamples=disabled build
cd build
ninja && ninja install
三、报错
1.报错ERROR: Program 'flex win_flex' not found or not executable,没有安装flex
sudo apt install flex
2.报错:subprojects/gstreamer/gst/parse/meson.build:34:8: ERROR: Program 'bison win_bison' not found or not executable,没有安装bison
sudo apt install bison
3.报错:libffi.so.8, needed by /home/ubuntu/RK3588/usr/lib/libgobject-2.0.so, not found (try using -rpath or -rpath-link)
libffi的库保存在lib64目录下而不是lib目录下,libgobject-2.0依赖libffi库,将lib64/下的libffi库复制到lib/下即可
cp * ../lib
4.报错缺少头文件,zlib.h或expat.h等
暂时的解决办法是预先编译这两个库,然后再构建gstreamer;或许可以修改meson.build文件,指定这两个库的路径,但是暂时尚未熟悉meson构建方式。