准备工作,下载链接库

编译Gstreamer需要依赖其他的链接库,比如:zlib,libffi,libxml,orc,x264,glib,gettext,openssl
贴一个包含了很多链接库的地址,进入之后搜索这些库下载下来即可: 传送门

下载Gstreamer Gstreamer下载路径链接

新建一个文件夹存放在这些包,如 gst-build
另建一个文件夹存放编译后的头文件和库,如prefix

相关链接库的版本最好下载图中的对应版本

因为高版本的链接库开始用meson来构建和编译,我还是习惯于用configure命令来配置

在这里插入图片描述
解压之后就可以开始一个一个编译了

我的交叉编译工具是Xilinx petalinx带的 arm-linux-gnueabihf-gcc

编译zlib

cd zlib-1.2.11/
修改Makefile,在最后添加gcc=arm-linux-gnueabihf-gcc

CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/hammer/gst-build/prefix/ --enable-shared

make -j16
make install

编译libffi

cd libffi-3.2.1/

CC=arm-linux-gnueabihf-gcc ./configure --prefix=/home/hammer/gst-build/prefix/ --host=arm-linux-gnueabihf

make -j16
make install

编译gettext

cd gettext-0.21

./configure --prefix=/home/hammer/gst-build/prefix/ --enable-shared --host=arm-linux-gnueabihf

make -j16
make install

编译glib

glib的编译依赖 libffi 和 zlib,需要指定两者的头文件和库文件的位置,查看并修改对应的目录

cd glib-2.56.1/

LIBFFI_CFLAGS='-I/home/hammer/gst-build/prefix/lib/libffi-3.2.1/include' \
LIBFFI_LIBS='-lffi -L=/home/hammer/gst-build/prefix/lib' \
ZLIB_CFLAGS='-I/home/hammer/gst-build/prefix/include' \
ZLIB_LIBS='-lz -L/home/hammer/gst-build/prefix/lib' \
./configure --host=arm-linux-gnueabihf --prefix=/home/hammer/gst-build/prefix/ \
PKG_CONFIG_PATH=/home/hammer/gst-build/prefix/lib/pkgconfig/ \
glib_cv_stack_grows=no glib_cv_uscore=yes \
ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes \
--with-pcre=internal --enable-libmount=no

make -j16
make install

编译orc

cd orc-0.4.28/

./configure --prefix=/home/hammer/gst-build/prefix/ --host=arm-linux-gnueabihf

make -j16
make install

编译x264

cd x264-master/

./configure --prefix=/home/hammer/gst-build/prefix/ \
--enable-shared --host=arm-linux-gnueabihf --disable-asm \
--cross-prefix=arm-linux-gnueabihf-

make -j16
make install

编译libxml

cd libxml2-2.9.8/

./configure --prefix=/home/hammer/gst-build/prefix/ \
--enable-shared --host=arm-linux-gnueabihf \
CROSS_COMPILE=arm-linux-gnueabihf- --with-python=no \
Z_CFLAGS='-I/home/hammer/gst-build/prefix/include' \
Z_LIBS='-lz -L/home/hammer/gst-build/prefix/lib'

make -j16
make install

编译openssl

cd openssl-1.1.1h

./config no-asm shared --prefix=/home/hammer/gst-build/prefix CROSS_COMPILE=arm-linux-gnueabihf-

生成 Makefile 后找到并删除其中的 -m64 ,如图

在这里插入图片描述
最后执行 make -j16make install 就完成了

以上几个库编译完的目录大概是这样的,然后就可以准备编译Gstreamer了

在这里插入图片描述

交叉编译Gstreamer

cd gstreamer-1.14.0/

./configure --prefix=/home/hammer/gst-build/prefix/ --host=arm-linux-gnueabihf \
LDFLAGS="-Wl,--unresolved-symbols=ignore-in-shared-libs -I/home/hammer/gst-build/prefix/include" \
PKG_CONFIG_PATH=/home/hammer/gst-build/prefix/lib/pkgconfig \
GIO_LIBS="-L/home/hammer/gst-build/prefix/lib -lgio-2.0 -lgobject-2.0 -lglib-2.0" \
GLIB_LIBS="-L/home/hammer/gst-build/prefix/lib -lglib-2.0 -lgobject-2.0 -lgthread-2.0 -lgmodule-2.0" \
--disable-loadsave --disable-gtk-doc --disable-valgrind \
ac_cv_func_register_printf_function=no 

make -j16
make install

最后编译成功了,生产动态链接库在 prefix/lib 目录下,可以用 file 命令查看一下格式

file libgstreamer-1.0.so.0.1400.0

在这里插入图片描述
出现截图所示信息,说明可以运行在ARM板子上

我可以!相信你们也可以!有需要的可以跟着做试试,成功的话不妨点个小小的赞

参考博客

Gstreamer的交叉编译

Qt5.9.7交叉编译gstreamer

Logo

更多推荐