• arm-linux交叉编译Gstreamer


    准备工作,下载链接库

    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编译gettext

    cd gettext-0.21
    
    ./configure --prefix=/home/hammer/gst-build/prefix/ --enable-shared --host=arm-linux-gnueabihf
    
    make -j16
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    编译orc

    cd orc-0.4.28/
    
    ./configure --prefix=/home/hammer/gst-build/prefix/ --host=arm-linux-gnueabihf
    
    make -j16
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    编译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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    编译openssl

    cd openssl-1.1.1h
    
    ./config no-asm shared --prefix=/home/hammer/gst-build/prefix CROSS_COMPILE=arm-linux-gnueabihf-
    
    • 1
    • 2
    • 3

    生成 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    file libgstreamer-1.0.so.0.1400.0
    
    • 1

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

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

    参考博客

    Gstreamer的交叉编译

    Qt5.9.7交叉编译gstreamer

  • 相关阅读:
    虚拟DOM和真实DOM的区别和联系
    vue组件间通信的四种方法
    Spring Boot中消息是什么?同步异步消息是啥/都包含那些技术?Activate MQ消息怎么整合
    一篇文章快速教你如何搭建数据驱动自动化测试框架?
    示例:WPF中绑定枚举到ComboBox想显示成中文或自定义名称如何实现
    css实现不同设备适配
    美术 3.2 2D动画Spine基础教学
    Visual Studio中使用预编译头文件
    【抽代复习笔记】15-群(九):凯莱定理
    Uni-ControlNet: All-in-One Control toText-to-Image Diffusion Models——【论文笔记】
  • 原文地址:https://blog.csdn.net/qq_41873311/article/details/125596507