从源代码安装时如何将共享库升级到更新版本?

从源代码安装时如何将共享库升级到更新版本?

我正在从源代码安装一个应用程序,它需要一个共享库,我将其称为 abc。配置过程libabc.so在 中找到一个符号链接/usr/lib,该符号链接指向 中的 0.23 版本的 abc /usr/lib folder。但是,我正在安装的项目需要最新0.24版本的 abc。我下载了 abc 的源代码并遵循安装过程:(configure, make, make install)。 abc版本0.24现已安装在/usr/local/lib.然而,configure我正在安装的应用程序的实用程序仍然抱怨 abc 版本0.23不足以继续安装。如何将系统上安装的 abc 从 0.23 升级到 0.24?作为一个潜在的黑客,我想我可以更改 for 中的符号链接/usr/lib/libabc.so以指向 中的文件/usr/local/lib,但我不认为这是一个干净的解决方案。另一种可能性是以某种方式告诉安装程序也在/usr/local/lib.最好的方法是什么?

请注意,/usr/local/lib中的配置文件之一列出了/etc/ld.so.conf.d/

答案1

基本上,如果这是一次升级,并且您的旧程序也可以依赖 0.24,我建议您使用新程序覆盖您以前安装的库(这就是我们所说的更高级别的“升级”)。虽然使用包管理器来管理所有这些会更好,但您可能会遇到一些库,这些库的源代码在您的发行版存储库中不可用。

默认情况下,手动构建的库会转到/usr/local/lib,但这由脚本决定configure。但是,如果可能的话,可以改变这一点:

$ ./configure --prefix=/usr
$ make
$ sudo make install

通过用作/usr前缀,库对象将转到/usr/lib、头文件/usr/include、配置等等/usr/etc...这基本上应该覆盖您以前版本的库,因为.so如果由正确维护,两个版本的文件应该具有相同的名称开发商。

现在,如果您想保留 0.23(例如,如果您的第一个程序不处理 0.24),则必须/usr/local为您的最后一个configure脚本(与需要 0.24 的程序关联的程序)指定新库的路径(位于 ) )。

大多数时候,configure脚本提供开关来指定库的路径,以便处于这种情况的人们在安装时可以具体化。这些开关的列表应该可以通过 看到./configure --help。在你的情况下,标准规定这样的开关应该被称为--with-libabc--with-abc

$ ./configure --with-libabc=/usr/local/lib

PHP 的依赖就是一个很好的例子libxml

$ ./configure --with-libxml-dir=...

某些脚本还可能提供一个--with-libdir开关,允许您完全更改库搜索路径:

$ ./configure --with-libdir=...

您可能还想看看这个堆栈溢出问题关于config.site关于该文件的

相关内容