我正在从源代码安装一个应用程序,它需要一个共享库,我将其称为 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
关于该文件的。