Linux-使用ldconfig
时间:2020-03-06 15:05:03 来源:igfitidea点击:
假设我已经向/etc/ld.so.conf中包含的路径添加了一个foo.so.1.1.1库。
当我在系统上运行ldconfig时,我获得了foo.so.1.1和foo.so.1到foo.so.1.1.1的链接。
如何更改行为以也将foo.so链接获取到foo.so.1.1.1?
解决方案
自己制作符号链接:
ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so
请注意,要使应用程序以这种方式使用库,需要将它们明确链接到未版本控制的共享库。 IE:这是一种完全绕过动态加载程序的版本匹配系统的机制。
ldconfig在找到的所有共享对象中查找soname。然后,它将使用该soname作为链接的名称来创建链接。将soname用作库的名称和主要版本是常规的(但远没有做到),因此库foo.so.1.1的soname为foo.so.1,而ldconfig将创建一个链接。
运行时系统的任何部分都不会查找或者不知道有关foo.so的名称。当我们将程序链接到库时使用。除非我们还拥有该库的所有其他开发文件(标头等),否则没有链接是没有意义的,因此ldconfig中没有必要自动创建它。而且,由于要使用的链接名称仅是另一种约定,在这种情况下根本没有存储在文件中,因此ldconfig无法知道要创建的名称。
通常,这是在Makefile的安装目标中手动创建的;当为Linux发行版打包了一个库时,该链接通常与头文件一起位于-dev包中。