问题:
我有一个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