12.04 上的不同版本的 libstdc++6

12.04 上的不同版本的 libstdc++6

将 Server 10.04 升级到 12.04 后,我在尝试使用 g++ 和 gcc 进行编译时收到与 lgcc_s 相关的错误。 中安装了几个版本的 libgcc_s ,包括 4.6 和 4.8。如果我在 4.6 目录中/usr/lib/gcc/x86_64-linux-gnu/创建指向 的符号链接,以便它在我的路径上,则编译会出现错误。如果我链接 4.8 文件夹中的版本,则一切正常。检查 的版本会给出libgcc_s.so/usr/libld: unable to find lgcc_slibstdc++6

apt-cache policy libstdc++6
libstdc++6:
  Installed: 4.8.1-2ubuntu1~10.04.1
  Candidate: 4.8.1-2ubuntu1~10.04.1
  Version table:
 *** 4.8.1-2ubuntu1~10.04.1 0
        100 /var/lib/dpkg/status
     4.6.3-1ubuntu5 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages

的版本g++4.6.3

在全新安装的 12.04 中,只有 4.6 目录可用/usr/lib/gcc/x86_64-linux-gnu/。此外,的输出apt-cache policy libstdc++6

libstdc++6:
  Installed: 4.6.3-1ubuntu5
  Candidate: 4.6.3-1ubuntu5
  Version table:
 *** 4.6.3-1ubuntu5 0
        500 http://us.archive.ubuntu.com/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status

为什么安装后版本libstdc++6不同?为什么链接 4.8 目​​录中的库有效,而 4.6 目录中的库无效?如何删除 4.8 版本libstdc++6而不破坏其依赖项(几乎是系统上的每个程序)?

最后,提出这些问题的主要原因是,我尝试(但失败了)构建几个软件包(Cantera 和 RDKit),但这些软件包在各个 C++ 编译器步骤中都失败了。我想消除 gcc 作为问题的根源,而这种不一致对我来说很突出。

答案1

正如您在全新安装中看到的,4.8.1-2ubuntu1~10.04.1软件包的版本并不精确(我想知道您从哪里获得它,因为只有 saucy 有该软件包,可能是 PPA)。最好的方法是删除软件包并从存储库安装。在某些情况下,apt-get 会拒绝,因此您必须强制它执行您的意愿:

sudo apt-get -f install libstdc++6=4.6.3-1ubuntu5

我会检查其他可能有同样情况的包裹。

相关内容