将 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/lib
ld: unable to find lgcc_s
libstdc++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
我会检查其他可能有同样情况的包裹。