当前位置:网站首页>安装gstreamer开发依赖库到项目sysroot目录
安装gstreamer开发依赖库到项目sysroot目录
2022-07-31 05:23:00 【HUI的技術筆記】
背景
在项目中,需要实现一个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:将软件包中的文件释放到指定目录下,并显示释放文件的详细过程
边栏推荐
猜你喜欢
随机推荐
VNC 启动脚本
file和stat命令的使用,文件类型:代表字符,以及英文
@ConfigurationProperties和@EnableConfigurationProperties
Database Principles Homework 2 — JMU
frp内网穿透服务
运行 npm 会弹出询问 “你要如何打开这个文件?“
PXE高效批量网络装机
ES6-字符串
ES6-模块
对称加密和非对称加密
TCP/IP协议和互联网协议群
OSI七层模型
Dart入门
4-1-7 二叉树及其遍历 家谱处理 (30 分)
浅析v-model语法糖的实现原理与细节知识及如何让你开发的组件支持v-model
ES6-03-解构赋值
Redux状态管理
Shell编程规范与变量
DOM操作-通过关系来获取元素
TypeScript基本类型