为Ubuntu 18.04和20.04构建deb包:依赖问题

分享于 

3分钟阅读

ubuntu

  繁體

问题:

我有一个C ++二进制应用程序,打包到Ubuntu 20.04上的"deb"软件包中。这个"deb"软件包有几个我定义的依赖项:


$ dpkg -I my-package-1.0.0.deb 


new Debian package, version 2.0.


...


Package: my-package


Version: 1.0.0


Architecture: amd64


Depends: libfreetype6,libgcc-s1,libgl1,libglew2.1,libglvnd0,libglx0,...


...



这个软件包工作正常。我尝试在Ubuntu 18.04上安装它:


$ sudo dpkg -i my-package-1.0.0.deb


Selecting previously unselected package my-package.


(Reading database ... 198305 files and directories currently installed.)


Preparing to unpack my-package-1.0.0.deb ...


Unpacking my-package (1.0.0) ...


dpkg: dependency problems prevent configuration of my-package:


 my-package depends on libgcc-s1; however:


 Package libgcc-s1 is not installed.


 my-package depends on libglew2.1; however:


 Package libglew2.1 is not installed.



软件包(libgcc-s1,libglew2.1)错误,在Ubuntu 18.04中不存在。因此,我有一个一般问题:


答案1:

唯一的解决方案是,为每个版本的Ubuntu构建一个包。

这是传统APT软件包系统的主要缺点。必须编译你的软件才能使用目标系统上存在的依赖项的版本。

这也是新的打包系统(如Snap,Flatpak和Appimage )的开发动机。


答案2:

在Ubuntu 18.04中,将my-package-1.0.0.deb文件复制到桌面。打开终端,并键入:


sudo apt update


cd ~/Desktop/


wget http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-10/gcc-10-base_10-20200411-0ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/main/g/gcc-10/libgcc-s1_10-20200411-0ubuntu1_amd64.deb http://mirrors.kernel.org/ubuntu/pool/universe/g/glew/libglew2.1_2.1.0-4_amd64.deb


sudo apt install ./gcc-10-base_10-20200411-0ubuntu1_amd64.deb ./libgcc-s1_10-20200411-0ubuntu1_amd64.deb ./libglew2.1_2.1.0-4_amd64.deb


sudo apt install ./my-package-1.0.0.deb



上面的命令也可以在Ubuntu版本上使用。

在Ubuntu 20.04中,依赖软件包已在默认的Ubuntu存储库中提供,因此步骤更加简单。


sudo apt install ./my-package-1.0.0.deb





构建  PAC  PACK  DEP  Ubuntu  DEB