为什么即使在 Debian 软件包的“控制”文件中指定了升级,我的软件包也没有升级?

为什么即使在 Debian 软件包的“控制”文件中指定了升级,我的软件包也没有升级?

我的项目建立在Ubuntu 14.04在 C++ 中使用 g++。

之前,我的项目使用了g++ 4.8用于开发。我们的软件依赖 libstdc++6 来运行。

我们提供Debian 软件包安装我们的软件。我们的 Debian 软件包仅安装运行我们的软件所需的运行时库。我们不想为客户安装开发工具。但由于 libstdc++6 已默认随 Ubuntu 14.04 一起安装,因此我们没有在 Debian 包的“控制”文件中指定它。

最近,我们切换到g++ 4.9。要安装 g++ 4.9,我们需要在运行“apt-get install”安装软件之前添加其 PPA。意识到我还需要使用与 g++ 4.9 兼容的 libstdc++6,我将“libstdc++6”放在“control”文件的“Depends”部分。如下所示:

依赖:libstdc++6 (其他软件包省略)

当执行“sudo apt-get install our-package”时,我意识到 libstdc++6不是升级到我想要的版本。因此,我会收到如下运行时错误消息:

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: 未找到版本‘CXXABI_1.3.8’

/usr/lib/x86_64-linux-gnu/libstdc++.so.6: 未找到版本‘GLIBCXX_3.4.20’

我确实确保了:

  • 我已将 g++ 4.9 PPA 添加到系统中(ppa:ubuntu-toolchain-r/test);
  • 添加它后,我运行了“apt-get update”。

相反,如果我sudo apt-get install libstdc++6手动运行,libstdc++6 将会升级到正确的版本。

我的理论是,“控制”文件的“Depends”部分更像是检查是否存在,而不是检查版本,并且由于 Ubuntu 14.04 已安装 libstdc++6,因此 Debian 软件包不会安装/升级它,因为它已在系统中找到。但是,“apt-get install”会检查最新版本,如果缺少则安装,如果存在则升级。

有任何想法吗??

相关内容