2016-08-02 140 views
0

我有一个linux系统,我编译并安装了GCC(4.3.9)的更新版本,它存在于/ usr/lib中。安装RPM时依赖于libstdC++(GLIBCXX _...)失败

我用这个编译器来构建一套我已经打包成一个RPM库的,但是当我来到尝试安装RPM它提供了以下错误:

rpm -ivh my-rpm.i586.rpm 
error: Failed dependencies: 
    libstdc++.so.6(GLIBCXX_3.4.10) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.11) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.15) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.20) is needed by my-rpm.i586 
    libstdc++.so.6(GLIBCXX_3.4.9) is needed by my-rpm.i586 

我知道这些符号

strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 
... 
GLIBCXX_3.4.10 
GLIBCXX_3.4.11 
... 
GLIBCXX_3.4.15 
... 
GLIBCXX_3.4.20 

而且,如果我做LDD任何打包成RPM的.so文件,我可以看到,它期待的正确的libstdC++:

海合会我整理提供

所以我认为我唯一的问题是让RPM的依赖解析器在正确的位置查找。 This answer意味着LD_LIBRARY_PATH是什么决定搜索路径,但在我的.bashrc中设置这似乎没有帮助(我可以看到它设置与回声在我运行rpm -i从相同的shell中)。

我需要设置(以及在哪里)让RPM安装程序了解我的libstdC++的位置?

+1

rpm检查其他rpms的“提供”中的依赖关系,而不检查路径中安装的内容。 –

回答

2

问题是rpm与“元数据”一起使用。官方的libstdC++ 6软件包提供

... 
libstdc++.so.6(GLIBCXX_3.4.10) 
libstdc++.so.6(GLIBCXX_3.4.11) 
... 

转速不会启动调查安装/usr/lib/libstdc++.so.6,看它是否提供GLIBCXX_3.4.10。 Afaik没有办法告诉rpm这样做。我看到了多种方法来解决这个问题;在我的优先顺序:

  1. 重建的的libstdC++ 4.3.9转你自己和安装;那么所有的依赖关系都可以正常工作(你可以看看here找到gcc * src.rpm)。至于我;那是唯一一个面向未来的解决方案!
  2. 打包my-rpm;使用选项AutoReqProv: no;告诉rpm不要自动扫描他的要求。当然,你可能会遇到依赖问题;您必须手动确定并安装依赖关系。
  3. 安装my-rpm时;使用选项--nodeps来忽略依赖关系。这可能会导致其他依赖关系出现问题(因为现在所有依赖关系都将被忽略)。
+0

我明白了,谢谢澄清。我会先尝试建议#1,然后 – jam

+1

,一旦你开始这样做,这很容易:get src.rpm;运行'rpmbuild --rebuild your.src.rpm'并安装结果rpms ... –