构建deb包前如何获取软件的依赖包
1. 如何用CMake构建deb包
CMake支持构建deb,rpm等形式的软件包,根据下面的cmakelist,就会生成一个简单的debian/control文件,如下。
SET(CPACK_GENERATOR "DEB")
SET(CPACK_PACKAGE_NAME "org.xzg.xweather")
SET(CPACK_PACKAGE_CONTACT "blueshaw@163.com")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "blueshaw")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "A simple weather app")
SET(CPACK_DEBIAN_PACKAGE_VERSION ${PACKAGE_VERSION})
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "Optional")
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5")
INCLUDE(CPack)
debian/control文件
Architecture: amd64
Depends: libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5
Description: A simple weather app
Maintainer: Xiao Zhiguo
Package: org.xzg.xweather
Priority: Optional
Section: devel
Version: 1.0.1
Installed-Size: 21254
如果你不赋值CPACK_DEBIAN_PACKAGE_DEPENDS这个变量,则在debian/control文件中,没有Depends这一行,虽然在你自己的机器上不影响打包构建。但是将deb包提供给他人安装后,可能无法运行。如果添加这一行,则可以在安装时就检查依赖是否满足。
2. 确定Depends依赖包
使用ldd查看可执行软件链接的动态库。
$ ldd xweather linux-vdso.so.1 (0x00007ffdde71d000)libQt5Widgets.so.5 => /lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007fb48ad0a000)libQt5Gui.so.5 => /lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007fb48a77f000)libQt5Network.so.5 => /lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007fb48a5de000)libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007fb48a0e3000)libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb489f5f000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb489ddc000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb489dc0000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb489bff000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb489bde000)libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007fb489b4a000)libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007fb489b11000)libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007fb489a0e000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fb4899ef000)libicui18n.so.63 => /lib/x86_64-linux-gnu/libicui18n.so.63 (0x00007fb489721000)libicuuc.so.63 => /lib/x86_64-linux-gnu/libicuuc.so.63 (0x00007fb489556000)libpcre2-16.so.0 => /lib/x86_64-linux-gnu/libpcre2-16.so.0 (0x00007fb4894db000)libdouble-conversion.so.1 => /lib/x86_64-linux-gnu/libdouble-conversion.so.1 (0x00007fb4894c4000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb4894bf000)libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fb48939e000)/lib64/ld-linux-x86-64.so.2 (0x00007fb48b389000)libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fb48936a000)libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fb4892ad000)libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007fb4891f1000)libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007fb4891c4000)libicudata.so.63 => /lib/x86_64-linux-gnu/libicudata.so.63 (0x00007fb4877d2000)libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fb48775e000)libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fb48761d000)libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fb487608000)libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fb4875de000)libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fb4875d7000)libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fb4875cf000)libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fb4875b5000)librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb4875ab000)
如果用Qt开发的应用,我们可以只关注Qt的库,使用grep过滤下。
$ ldd xweather | grep [Qq]tlibQt5Widgets.so.5 => /lib/x86_64-linux-gnu/libQt5Widgets.so.5 (0x00007ff241739000) libQt5Gui.so.5 => /lib/x86_64-linux-gnu/libQt5Gui.so.5 (0x00007ff2411ae000) libQt5Network.so.5 => /lib/x86_64-linux-gnu/libQt5Network.so.5 (0x00007ff24100d000) libQt5Core.so.5 => /lib/x86_64-linux-gnu/libQt5Core.so.5 (0x00007ff240b12000)
得到4个Qt的动态库,但是到这一步还没有结束,现在我们需要确定这些动态库都在哪些软件包里。
$ dpkg -S libQt5Widgets.so.5
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.11
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
libqt5widgets5:amd64: /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.11.3
通过上面的步骤,我们就可以得到libQt5Widgets.so.5这个动态库在libqt5widgets5这个包中。同样的步骤,依次获取其他3个软件包名。
libqt5widgets5
libqt5gui5
libqt5network5
libqt5core5a
将这些软件包名赋值给CPACK_DEBIAN_PACKAGE_DEPENDS即可。
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5widgets5, libqt5network5, libqt5gui5")
3 确定Build-Depends
后续的步骤是获取debian/control中Build-Depends的方法,记录下来,以备后用。
sudo apt-get install devscripts
The devscripts package provides a collection of scripts which may be of use to Debian developers and others wishing to build Debian packages.
要找出编译你的软件所需的软件包可以使用这个命令
$ dpkg-depcheck -d your_build_exec_binarywarning: files in /usr/local or /var/local used:
/usr/local/share/fonts/.uuid
The following files did not appear to belong to any package:
/usr/share/fonts/cMap/.uuid
/usr/lib/x86_64-linux-gnu/libdbus-1.so.3.19.13
/usr/share/fonts/deepin-font-install/.uuid
/usr/lib/x86_64-linux-gnu/libmount.so.1.1.0
/usr/lib/x86_64-linux-gnu/libgcc_s.so.1
/usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.4
/usr/share/poppler/cMap/Adobe-Japan1/.uuid
/usr/share/fonts/truetype/unifont/.uuid
/usr/lib/x86_64-linux-gnu/libpthread-2.28.so
/usr/share/poppler/cMap/Adobe-Korea1/.uuid
/usr/lib/x86_64-linux-gnu/libsystemd.so.0.25.0
/usr/share/fonts/truetype/deepin/.uuid
/usr/lib/x86_64-linux-gnu/libnss_dns-2.28.so
/usr/share/fonts/X11/encodings/.uuid
/usr/share/fonts/X11/encodings/large/.uuid
/usr/share/fonts/cmap/.uuid
/usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
/usr/share/fonts/truetype/.uuid
/usr/share/fonts/truetype/lohit-devanagari/.uuid
/usr/lib/x86_64-linux-gnu/libcap.so.2.25
/usr/lib/x86_64-linux-gnu/libdl-2.28.so
/usr/share/fonts/X11/100dpi/.uuid
/usr/share/fonts/.uuid
/usr/lib/x86_64-linux-gnu/libz.so.1.2.11
/usr/lib/x86_64-linux-gnu/libc-2.28.so
/usr/lib/x86_64-linux-gnu/libgpg-error.so.0.26.1
/usr/share/fonts/X11/Type1/.uuid
/usr/lib/x86_64-linux-gnu/libresolv-2.28.so
/usr/share/fonts/truetype/ancient-scripts/.uuid
/usr/lib/x86_64-linux-gnu/libtinfo.so.6.1
/etc/resolv.conf
/usr/share/poppler/cMap/Adobe-GB1/.uuid
/usr/share/fonts/X11/75dpi/.uuid
/usr/share/fonts/truetype/dejavu/.uuid
/usr/share/fonts/X11/.uuid
/usr/share/fonts/X11/util/.uuid
/usr/share/mime/mime.cache
/usr/share/fonts/opentype/.uuid
/usr/share/poppler/cMap/Adobe-Japan2/.uuid
/usr/lib/x86_64-linux-gnu/libm-2.28.so
/usr/lib/x86_64-linux-gnu/libpcre.so.3.13.3
/etc/hosts
/usr/lib/locale/locale-archive
/etc/passwd
/usr/share/mime/image/png.xml
/usr/share/fonts/wps-office/.uuid
/usr/lib/x86_64-linux-gnu/libnss_files-2.28.so
/etc/nsswitch.conf
/usr/lib/x86_64-linux-gnu/libblkid.so.1.1.0
/usr/lib/x86_64-linux-gnu/libexpat.so.1.6.8
/usr/share/fonts/truetype/noto/.uuid
/usr/share/poppler/cMap/Adobe-CNS1/.uuid
/usr/lib/x86_64-linux-gnu/librt-2.28.so
/usr/lib/x86_64-linux-gnu/libwrap.so.0.7.6
/usr/share/fonts/opentype/noto/.uuid
/usr/share/fonts/X11/misc/.uuid
/usr/lib/x86_64-linux-gnu/libnsl-2.28.so
/usr/share/mime/types
/usr/lib/x86_64-linux-gnu/liblzma.so.5.2.4
/usr/lib/x86_64-linux-gnu/libselinux.so.1
Packages needed:fonts-lohit-devadeepin-default-settingslibqt5xdgiconloader3:amd64libxcb-keysyms1:amd64libdouble-conversion1:amd64libvorbis0a:amd64libjpeg62-turbo:amd64libmtdev1:amd64libx11-6:amd64libqt5widgets5:amd64libglvnd0:amd64fcitx-frontend-qt5:amd64libxcb-dri3-0:amd64libpulse0:amd64libcroco3:amd64libxcb-dri2-0:amd64libqt5xml5:amd64libpcre2-16-0:amd64libxcb1:amd64libgdk-pixbuf2.0-0:amd64libfontconfig1:amd64libxcb-render0:amd64libwebpdemux2:amd64libglapi-mesa:amd64libxcb-glx0:amd64libice6:amd64libxml2:amd64libgl1-mesa-dri:amd64fontconfig-configdeepin-image-viewerlibglx-mesa0:amd64libdrm-amdgpu1:amd64libxkbcommon-x11-0:amd64localeslibxcb-composite0:amd64libpixman-1-0:amd64libcairo2:amd64libgsettings-qt1:amd64libffi6:amd64libpango-1.0-0:amd64qt5-image-formats-plugins:amd64libxfixes3:amd64libfribidi0:amd64libxcb-present0:amd64libedit2:amd64libglib2.0-0:amd64libxcb-xkb1:amd64libpangoft2-1.0-0:amd64fonts-dejavu-corelibsm6:amd64libqt5svg5:amd64qt5dxcb-pluginlibxkbcommon0:amd64libdtkcore5:amd64libasyncns0:amd64libxxf86vm1:amd64libqt5multimediawidgets5:amd64libqt5multimedia5:amd64libegl1:amd64libxcb-randr0:amd64libharfbuzz0b:amd64dde-qt5integrationlibqt5network5:amd64libx11-datadeepin-icon-themelibxcb-xinerama0:amd64libraw19:amd64libxcb-shm0:amd64libgraphite2-3:amd64libtiff5:amd64librsvg2-2:amd64fonts-noto-cjklibxrender1:amd64libmng1:amd64libdrm-nouveau2:amd64libqt5concurrent5:amd64libdtkgui5:amd64liblcms2-2:amd64libwebp6:amd64libxcb-xfixes0:amd64libxau6:amd64libxcb-sync1:amd64libjbig0:amd64libogg0:amd64libxi6:amd64libxcb-icccm4:amd64libxtst6:amd64libqt5dbus5:amd64libxext6:amd64libthai0:amd64libxcb-util0:amd64libsensors5:amd64libqt5opengl5:amd64libxcursor1:amd64libvorbisenc2:amd64libflac8:amd64libgl1:amd64libfreetype6:amd64libllvm7:amd64libpulse-mainloop-glib0:amd64libzstd1:amd64libqt5xdg3:amd64libbsd0:amd64libdatrie1:amd64libxshmfence1:amd64tzdatalibxcb-damage0:amd64libqt5core5a:amd64libx11-xcb1:amd64libpangocairo-1.0-0:amd64libicu63:amd64libdrm2:amd64libqt5x11extras5:amd64ca-certificateslibxdmcp6:amd64libxcb-image0:amd64libdrm-radeon1:amd64libc-l10ndde-kwinlibsndfile1:amd64libqt5gui5:amd64libxcb-render-util0:amd64libdtkwidget5:amd64libglx0:amd64libxcb-shape0:amd64openssllibpng16-16:amd64libstartup-notification0:amd64libxdamage1:amd64libelf1:amd64libdframeworkdbus2:amd64libssl1.1:amd64
另一种方法可以执行
$ objdump -p your_build_exec_binary | grep NEEDEDNEEDED libQt5Widgets.so.5NEEDED libQt5Gui.so.5NEEDED libQt5Network.so.5NEEDED libQt5Core.so.5NEEDED libstdc++.so.6NEEDED libm.so.6NEEDED libgcc_s.so.1NEEDED libc.so.6
通过上述两个办法获取到动态库后,执行下面的命令,获取开发包。
$ dpkg -S libQt5Network | grep dev
qtbase5-dev:amd64: /usr/lib/x86_64-linux-gnu/libQt5Network.so
填入到Build-Depends中即可。
构建deb包前如何获取软件的依赖包相关推荐
- go get 获取被墙依赖包解决方法
go get 获取被墙依赖包解决方法 参考文章: (1)go get 获取被墙依赖包解决方法 (2)https://www.cnblogs.com/lpfuture/p/11395232.html ( ...
- Homebrew卸载软件及其依赖包
brew uninstall xxx卸载软件只会卸载软件本身而不会同时卸载其依赖包 使用以下命令可完全卸载,并且不会影响到其他软件 brew rmtree xxx 需要安装以下工具 brew tap ...
- 依赖包 全局_composer 更新指定的依赖包
php中文网最新课程 每日17点准时技术干货分享 composer更新指定的依赖包 compoesr 的require/update都可以更新指定的依赖包(升级/降级). require更为灵活些,未 ...
- oracle分页包,Oracle分页获取数据的实现 (包和存储过程)
本文档主要是介绍针对oracle数据库中利用包和存储过程来实现分页获取数据的内容.其实该存储过程的主题思想及主要实现我也是从网上找的,自己做了整合. 包括包头声明和包体实现部分以及C#代码具体调用部分 ...
- 强制卸载软件包linux,Linux下如何用rpm卸载软件 rpm依赖包强制卸载
以Mysql为例. #查看安装的Mysql版本 sjgx2:/usr/local/mysql/bin # rpm -qa |grep -i mysql MySQL-client-5.1.17-0.gl ...
- linux rpm卸载包及其依赖,Linux下如何用rpm卸载软件 rpm依赖包强制卸载
以Mysql为例. #查看安装的Mysql版本 sjgx2:/usr/local/mysql/bin # rpm -qa |grep -i mysql MySQL-client-5.1.17-0.gl ...
- python安装依赖包经常出错怎么办_Python 下载依赖包环境经常失败超时解决方法...
人生苦短,我用python!为什么很多人喜欢用python,因为包多呀,各种调包.但是调包有的时候也调的闹心,因为安装包不是失败就是很慢,很影响自己的工作进度,这里给出一个pip快速安装工具包的办法, ...
- android jar包 下载地址,Android Studio项目依赖包下载到本地的jar或aar的路径
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/chenzhengfeng/articl ...
- 如何获取ubuntu源码包里面的源码进行编译
如何获取ubuntu源码包里面的源码进行编译 1.在获取源码包之前,确保在软件源配置文件 /etc/apt/sources.list 中添加了deb-src项 2.使用如下命令获取xxx源码包的详细信 ...
最新文章
- linux的ll命令参数,linux ll命令参数的详解
- python带我起飞_【有书共读】python带我起飞读书笔记05
- 一步步实现:JPA的基本增删改查CRUD(jpa基于hibernate)
- 关于字节序(大端法、小端法)的定义
- 同一个ip能否两次加入组播_组播IGMPv1/v2/v3精华知识汇总
- linux awk 常见字符串处理
- 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)
- Project中三种任务类型解释
- echart 表格_市政工程表格不会填?市政工程1000个表格模板,一键即可套用
- iis设置开启GZIP网页压缩功能
- windows XP系统自动关机
- 一小心删除了系统文件NTDETECT.COM怎么办
- 企业微信客户朋友圈怎么发?朋友圈规则有哪些?
- win10总是很快自动休眠怎么解决?
- python编写规范
- 若依分离版部署遇到的问题
- 大学328门专业课程标准英文翻译模板
- 拯救BUG 10五笔输入法Shift键切换中英文问题
- “安超云ArSDN”荣获“信息基础设施优秀解决方案”
- 腾讯云Linux服务器 centos7 Lampp环境搭建 vsftp搭建 ssl证书安装 所遇到的问题