解决Linux库依赖关系?

时间:2017-08-21 18:53:08

标签: c++ linux

我是Linux新手,但我尝试以.deb和.rpm格式分发应用程序。我在以下三个libicu库中遇到了问题:

libicui18n.so.52.1 => not found
libicuuc.so.52.1 => not found
libicudata.so.52.1 => not found

问题是应用程序所需的版本并不总是与系统上安装的版本匹配,例如Fedora 26附带libicu 57.1而我的应用程序正在寻找52.1。将libicu添加到包依赖列表doest帮助,因为已经安装了libicu,所以安装libicu只是给出:

Package libicu-57.1-6.fc26.x86_64 is already installed, skipping.
Dependencies resolved.
Nothing to do.
Complete!

我无法找到libicu52.1的软件包,但是尝试安装较旧的软件包似乎无论如何都无法运行。我尝试了libicu-54.1-4.fc22.x86_64,但它说没有可用的软件包,大概是因为它只能在Fedora 22上使用。

我在考虑将这些库包含在应用程序包中并将它们安装到/ usr / lib64,但作为Linux新手,我不确定这是否可以接受。

解决这个问题的最佳方法是什么?

编辑:我在相关部分中看到this帖子说:

  

新版本的库不应该破坏现有的应用程序,除非   您正在使用已弃用的功能。

我在与libicu 57.1一起提供的Fedora 26上进行测试。我的应用程序只需要libicu 52.1,所以如果以上是真的,我认为它应该正常工作。我需要做些什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

让您的软件包安装libicu/usr/lib64的“额外”版本对大多数用户来说都会非常令人惊讶。不要那样做。

这里的标准做法是为每个目标平台构建不同的.deb和.rpm文件。就像你需要为32位和64位单独构建一样,你需要为CentOS 6和7分别构建。你可以通过运行一组虚拟机来执行发布构建 - 每个一个您想要支持的目标平台。

如果你真的需要制作一个可以在许多平台上运行的.deb或.rpm,一种方法就是消除一些依赖关系。在这种情况下,所有这些库都是同一个项目(ICU)的一部分,所以如果你真的不需要依赖那个项目,那就不要。