安装gstreamer开发依赖库到项目sysroot目录

背景

在项目中,需要实现一个gstreamer的pipeline,依赖libgstreamer1.0和libgstapp-1.0库,因为是系统是x86_64环境,需要在i386的sysroot下安装这些库,基于这个背景,发现通过apt安装,然后从apt安装的cache路径,拿到这些库解包后拷贝到sysroot目录是非常方便。

首先,设置apt安装包时是否保留下载的deb包:

# 禁止保存
echo 'Binary::apt::APT::Keep-Downloaded-Packages "0";' | sudo tee /etc/apt/apt.conf.d/10apt-keep-downloads

# 允许保存
echo 'Binary::apt::APT::Keep-Downloaded-Packages "1";' | sudo tee /etc/apt/apt.conf.d/10apt-keep-downloads

执行第二条命令运行apt cache保存下载的deb包。

libgstapp-1.0.so -> libgstapp-1.0.so.0.1602.0

解包libgstreamer1.0 & libgstapp-1.0

通过dpkg-deb -X 解压缩就可以看到,libgstreamer1.0的库在libgstreamer1.0-0里面,而和libgstreamer1.0-dev里面存放的是头文件,pkg-config需要的pc文件和指向libgstreamer1.0-0里面的库的符号链接。

建一个out目录,解包libgstreamer1.0-0_1.16.2-2_i386.deb到out目录,如下:

$ dpkg -X libgstreamer1.0-0_1.16.2-2_i386.deb out
./
./usr/
./usr/lib/
./usr/lib/i386-linux-gnu/
./usr/lib/i386-linux-gnu/gstreamer-1.0/
./usr/lib/i386-linux-gnu/gstreamer-1.0/libgstcoreelements.so
./usr/lib/i386-linux-gnu/gstreamer-1.0/libgstcoretracers.so
./usr/lib/i386-linux-gnu/gstreamer1.0/
./usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/
./usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-plugin-scanner
./usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper
./usr/lib/i386-linux-gnu/libgstbase-1.0.so.0.1602.0
./usr/lib/i386-linux-gnu/libgstcheck-1.0.so.0.1602.0
./usr/lib/i386-linux-gnu/libgstcontroller-1.0.so.0.1602.0
./usr/lib/i386-linux-gnu/libgstnet-1.0.so.0.1602.0
./usr/lib/i386-linux-gnu/libgstreamer-1.0.so.0.1602.0

# 符号链接
./usr/lib/i386-linux-gnu/libgstbase-1.0.so.0
./usr/lib/i386-linux-gnu/libgstcheck-1.0.so.0
./usr/lib/i386-linux-gnu/libgstcontroller-1.0.so.0
./usr/lib/i386-linux-gnu/libgstnet-1.0.so.0
./usr/lib/i386-linux-gnu/libgstreamer-1.0.so.0

从这个解包的输出可以看出,不带dev的deb包里面是全部的so库,包括符号链接。

再建立out-dev目录,通过dpkg-deb -X命令解包libgstreamer1.0-dev到out-dev目录:

$ dpkg-deb -X libgstreamer1.0-dev_1.16.2-2_i386.deb out-dev/

# include需要的文件
./
./usr/
./usr/bin/
./usr/bin/dh_gstscancodecs
./usr/include/
./usr/include/gstreamer-1.0/
./usr/include/gstreamer-1.0/gst/
./usr/include/gstreamer-1.0/gst/base/
./usr/include/gstreamer-1.0/gst/base/base-prelude.h
./usr/include/gstreamer-1.0/gst/base/base.h
./usr/include/gstreamer-1.0/gst/base/gstadapter.h
./usr/include/gstreamer-1.0/gst/base/gstaggregator.h
./usr/include/gstreamer-1.0/gst/base/gstbaseparse.h
./usr/include/gstreamer-1.0/gst/base/gstbasesink.h
./usr/include/gstreamer-1.0/gst/base/gstbasesrc.h
./usr/include/gstreamer-1.0/gst/base/gstbasetransform.h
./usr/include/gstreamer-1.0/gst/base/gstbitreader.h
./usr/include/gstreamer-1.0/gst/base/gstbitwriter.h
./usr/include/gstreamer-1.0/gst/base/gstbytereader.h
./usr/include/gstreamer-1.0/gst/base/gstbytewriter.h
./usr/include/gstreamer-1.0/gst/base/gstcollectpads.h
# ...


# pkg-config的pc文件
./usr/lib/
./usr/lib/i386-linux-gnu/
./usr/lib/i386-linux-gnu/gstreamer1.0/
./usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/
./usr/lib/i386-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-codec-info-1.0
./usr/lib/i386-linux-gnu/pkgconfig/
./usr/lib/i386-linux-gnu/pkgconfig/gstreamer-1.0.pc
./usr/lib/i386-linux-gnu/pkgconfig/gstreamer-base-1.0.pc
./usr/lib/i386-linux-gnu/pkgconfig/gstreamer-check-1.0.pc
./usr/lib/i386-linux-gnu/pkgconfig/gstreamer-controller-1.0.pc
./usr/lib/i386-linux-gnu/pkgconfig/gstreamer-net-1.0.pc

# 这些库只是符号链接
./usr/lib/i386-linux-gnu/libgstbase-1.0.so
./usr/lib/i386-linux-gnu/libgstcheck-1.0.so
./usr/lib/i386-linux-gnu/libgstcontroller-1.0.so
./usr/lib/i386-linux-gnu/libgstnet-1.0.so
./usr/lib/i386-linux-gnu/libgstreamer-1.0.so

完成这些验证,就可以把这个过程应用到我们的环境中,比如我们的环境sysroot路径是./i386-sysroot/


# step 1: 安装libgstreamer1.0库

sudo apt install libgstreamer1.0-0:i386
sudo apt install libgstreamer1.0-dev:i386


cp /var/cache/apt/archives/libgstreamer1.0-0_1.16.2-2_i386.deb .
cp /var/cache/apt/archives/libgstreamer1.0-dev_1.16.2-2_i386.deb .
dpkg-deb -X libgstreamer1.0-0_1.16.2-2_i386.deb ./i386-sysroot/
dpkg-deb -X libgstreamer1.0-dev_1.16.2-2_i386.deb ./i386-sysroot/



# step 2:安装libgstreamer-plugins-base1.0库

sudo apt install libgstreamer-plugins-base1.0-0:i386
sudo apt install libgstreamer-plugins-base1.0-dev:i386

cp /var/cache/apt/archives/libgstreamer-plugins-base1.0-0_1.16.2-4ubuntu0.1_i386.deb .
cp /var/cache/apt/archives/libgstreamer-plugins-base1.0-dev_1.16.2-4ubuntu0.1_i386.deb .

dpkg-deb -X libgstreamer-plugins-base1.0-0_1.16.2-4ubuntu0.1_i386.deb ./i386-sysroot/
dpkg-deb -X libgstreamer-plugins-base1.0-dev_1.16.2-4ubuntu0.1_i386.deb ./i386-sysroot/

完成上面两个步骤,sysroot中依赖gstreamer的开发环境就配置好了,如果需要其他的依赖也可以按此操作。

在ubuntu上,libgstreamer1.0-0这个名字可以通过apt search获得,比如:

$ apt search gstreamer

libgstreamer1.0-0/focal,now 1.16.2-2 amd64 [installed,automatic]
  Core GStreamer libraries and elements
  
libgstreamer1.0-dev/focal 1.16.2-2 amd64
  GStreamer core development files  
  
libgstreamer-plugins-base1.0-0/focal-updates,focal-security,now 1.16.2-4ubuntu0.1 amd64 [installed,automatic]
  GStreamer libraries from the "base" set

libgstreamer-plugins-base1.0-dev/focal-updates,focal-security 1.16.2-4ubuntu0.1 amd64
  GStreamer development files for libraries from the "base" set

安装的时候后面加上i386安装的就是32位的版本。

sudo apt install libgstreamer1.0-0:i386
sudo apt install libgstreamer1.0-dev:i386

📣 附dpkg-deb命令解释

dpkg-deb命令是Debian Linux下的软件包管理工具,可以对软件包执行打包和解包操作。

-X:将软件包中的文件释放到指定目录下,并显示释放文件的详细过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值