冲突的 C++ 库

Connflicting C++ libraries

我正在尝试在我的 VM 中安装 RPM,并且在 yum install 期间收到以下消息。

file /usr/lib64/libstdc++.so.6 from install of myPackage.x86_64 conflicts with file from package libstdc++-4.8.5-16.el7_4.2.x86_64
file /usr/lib64/libz.so.1 from install of myPackage.x86_64 conflicts with file from package zlib-1.2.7-17.el7.x86_64
file /usr/lib64/libgcc_s.so.1 from install of myPackage.x86_64 conflicts with file from package libgcc-4.8.5-16.el7_4.2.x86_64
file /usr/lib64/libgomp.so.1 from install of myPackage.x86_64 conflicts with file from package libgomp-4.8.5-16.el7_4.2.x86_64
file /usr/lib64/libgomp.so.1.0.0 from install of myPackage.x86_64 conflicts with file from package libgomp-4.8.5-16.el7_4.2.x86_64

我在 Centos7 中 运行,我很确定 libstdc++-4.8.5-16 即将到来,因为我从Centos 回购协议。

有没有办法解决这些冲突?例如,有没有办法告诉 gdb 使用更新的 libstdc++ 库?

无论您尝试安装什么神秘包,都存在不良行为。它试图在 CentOS 7 上安装一些共享库文件,根据权利,这些文件是 libstdc++ 包的 "owned"。由于这种不当行为,Yum 正确地拒绝了神秘包。

您应该与软件包作者联系并告知他们他们的软件包不符合质量准则。如果他们编写的软件绝对需要更新版本的 libstdc++,而不是在此环境中正式发布的版本,那么他们可以:

  • Use devtoolset,或
  • statically link the runtime, 或
  • package the newer shared library 但将它安装在隔离的地方,在一个只会被神秘软件使用的地方。它 绝不能 接管平台自己的包,除非您希望它导致奇怪的运行时行为,因为系统上的所有其他 C++ 应用程序突然与 GCC 运行时库的一些神秘的更新版本链接。

如果不需要不同的共享库版本,那么作者应该:

  • 首先针对官方分发的库进行构建,然后
  • 在其 RPM 的 .spec 文件中表示先决条件...例如libstdc++ & libgomp.