Linux – 使用ldconfig

比方说,我已经将库foo.so.1.1.1添加到/etc/ld.so.conf包含的path当我在系统上运行ldconfig时,获得了链接foo.so.1.1和foo.so .1到foo.so.1.1.1

我怎样才能改变行为,以获得foo.so.1.1.1的foo.so链接?

Solutions Collecting From Web of "Linux – 使用ldconfig"

ldconfig在它所找到的所有共享对象的内部查找,以查找soname。 然后它使用soname作为链接的名称创建一个链接。 这是传统的(但远不是普遍的做法)soname是图书馆的名称和主要版本,所以你的图书馆foo.so.1.1将有一个foo.so.1的soname,而ldconfig将会建立一个链接。

运行时系统的任何部分都不会查找或知道名称foo.so的任何内容。 当您将程序链接到库时会用到这个。 除非你还拥有库的所有其他开发文件(头文件等),否则没有任何意义,所以ldconfig自动创建它没有意义。 由于要使用的链接的名称只是另一个约定,在这种情况下,根本不存储在文件内部,所以ldconfig无法知道要创建的名称。

通常这将在Makefile的安装目标中手动创建; 当为Linux发行版打包库时,链接通常与头文件一起存放在-dev包中。

只要自己做符号链接:

 ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so 

请注意,对于以这种方式使用库的应用程序,他们需要显式链接到未版本化的共享对象。 IE:这是一个完全绕过动态加载器的版本匹配系统的机制。