假设我向/etc/ld.so.conf中包含的路径添加了一个库foo.so.1.1.1,当我在系统上运行ldconfig时,我得到了foo.so.1.1和foo.so.1.1.1的链接。
如何更改行为以获得指向foo.so.1.1.1的foo.so链接?
发布于 2008-10-03 16:25:31
ldconfig在它找到的所有共享对象中查找soname。然后,它使用该soname作为链接的名称来创建一个链接。按照惯例(但不是通用的做法),soname是库的名称和主要版本,所以您的库foo.so.1.1将有一个soname为foo.so.1,ldconfig将创建一个名为foo.so.1的链接。
运行时系统的任何部分都不会查找或知道任何关于名称foo.so的信息。当你把你的程序链接到库的时候就用到了。除非您还拥有该库的所有其他开发文件(头文件等),否则使用该链接是没有意义的,所以ldconfig自动创建它是没有意义的。由于要使用的链接的名称只是另一种约定,并且在本例中根本没有存储在文件中,因此ldconfig无法知道要创建什么名称。
通常,这将在Makefile的安装目标中手动创建;当为linux发行版打包一个库时,链接通常与头文件一起存在于-dev包中。
发布于 2008-10-03 16:20:10
只需自己创建符号链接即可:
ln -s /usr/lib/foo.so.1.1.1 /usr/lib/foo.so请注意,对于以这种方式使用库的应用程序,它们需要显式地链接到未版本化的共享对象。这是一种完全绕过动态加载器的版本匹配系统的机制。
https://stackoverflow.com/questions/167635
复制相似问题