构建deb包前如何获取软件的依赖包

5 篇文章 0 订阅

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]t
        libQt5Widgets.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_binary

warning: 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-deva
  deepin-default-settings
  libqt5xdgiconloader3:amd64
  libxcb-keysyms1:amd64
  libdouble-conversion1:amd64
  libvorbis0a:amd64
  libjpeg62-turbo:amd64
  libmtdev1:amd64
  libx11-6:amd64
  libqt5widgets5:amd64
  libglvnd0:amd64
  fcitx-frontend-qt5:amd64
  libxcb-dri3-0:amd64
  libpulse0:amd64
  libcroco3:amd64
  libxcb-dri2-0:amd64
  libqt5xml5:amd64
  libpcre2-16-0:amd64
  libxcb1:amd64
  libgdk-pixbuf2.0-0:amd64
  libfontconfig1:amd64
  libxcb-render0:amd64
  libwebpdemux2:amd64
  libglapi-mesa:amd64
  libxcb-glx0:amd64
  libice6:amd64
  libxml2:amd64
  libgl1-mesa-dri:amd64
  fontconfig-config
  deepin-image-viewer
  libglx-mesa0:amd64
  libdrm-amdgpu1:amd64
  libxkbcommon-x11-0:amd64
  locales
  libxcb-composite0:amd64
  libpixman-1-0:amd64
  libcairo2:amd64
  libgsettings-qt1:amd64
  libffi6:amd64
  libpango-1.0-0:amd64
  qt5-image-formats-plugins:amd64
  libxfixes3:amd64
  libfribidi0:amd64
  libxcb-present0:amd64
  libedit2:amd64
  libglib2.0-0:amd64
  libxcb-xkb1:amd64
  libpangoft2-1.0-0:amd64
  fonts-dejavu-core
  libsm6:amd64
  libqt5svg5:amd64
  qt5dxcb-plugin
  libxkbcommon0:amd64
  libdtkcore5:amd64
  libasyncns0:amd64
  libxxf86vm1:amd64
  libqt5multimediawidgets5:amd64
  libqt5multimedia5:amd64
  libegl1:amd64
  libxcb-randr0:amd64
  libharfbuzz0b:amd64
  dde-qt5integration
  libqt5network5:amd64
  libx11-data
  deepin-icon-theme
  libxcb-xinerama0:amd64
  libraw19:amd64
  libxcb-shm0:amd64
  libgraphite2-3:amd64
  libtiff5:amd64
  librsvg2-2:amd64
  fonts-noto-cjk
  libxrender1:amd64
  libmng1:amd64
  libdrm-nouveau2:amd64
  libqt5concurrent5:amd64
  libdtkgui5:amd64
  liblcms2-2:amd64
  libwebp6:amd64
  libxcb-xfixes0:amd64
  libxau6:amd64
  libxcb-sync1:amd64
  libjbig0:amd64
  libogg0:amd64
  libxi6:amd64
  libxcb-icccm4:amd64
  libxtst6:amd64
  libqt5dbus5:amd64
  libxext6:amd64
  libthai0:amd64
  libxcb-util0:amd64
  libsensors5:amd64
  libqt5opengl5:amd64
  libxcursor1:amd64
  libvorbisenc2:amd64
  libflac8:amd64
  libgl1:amd64
  libfreetype6:amd64
  libllvm7:amd64
  libpulse-mainloop-glib0:amd64
  libzstd1:amd64
  libqt5xdg3:amd64
  libbsd0:amd64
  libdatrie1:amd64
  libxshmfence1:amd64
  tzdata
  libxcb-damage0:amd64
  libqt5core5a:amd64
  libx11-xcb1:amd64
  libpangocairo-1.0-0:amd64
  libicu63:amd64
  libdrm2:amd64
  libqt5x11extras5:amd64
  ca-certificates
  libxdmcp6:amd64
  libxcb-image0:amd64
  libdrm-radeon1:amd64
  libc-l10n
  dde-kwin
  libsndfile1:amd64
  libqt5gui5:amd64
  libxcb-render-util0:amd64
  libdtkwidget5:amd64
  libglx0:amd64
  libxcb-shape0:amd64
  openssl
  libpng16-16:amd64
  libstartup-notification0:amd64
  libxdamage1:amd64
  libelf1:amd64
  libdframeworkdbus2:amd64
  libssl1.1:amd64

另一种方法可以执行

$ objdump -p your_build_exec_binary | grep NEEDED
 
  NEEDED               libQt5Widgets.so.5
  NEEDED               libQt5Gui.so.5
  NEEDED               libQt5Network.so.5
  NEEDED               libQt5Core.so.5
  NEEDED               libstdc++.so.6
  NEEDED               libm.so.6
  NEEDED               libgcc_s.so.1
  NEEDED               libc.so.6

通过上述两个办法获取到动态库后,执行下面的命令,获取开发包。

$ dpkg -S libQt5Network | grep dev
qtbase5-dev:amd64: /usr/lib/x86_64-linux-gnu/libQt5Network.so

填入到Build-Depends中即可。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值