liblz4.so
最近我安装了库apt-get install liblz4-1
,但我注意到上面的命令只安装这些文件/链接:
/usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
/usr/lib/x86_64-linux-gnu/liblz4.so.1 -> liblz4.so.1.7.1
我的理解是,在 Ubuntu 中,库名称可能包含库版本,但必须始终存在指向不包含它的这些文件之一的链接,因此ld
其他二进制文件/库可以找到它。在上面的例子中,这样的链接是/usr/lib/x86_64-linux-gnu/liblz4.so -> liblz4.so.1.7.1
。但是,apt-get
尚未创建此链接,我需要自己创建它。
这是软件包中的“失败”liblz4
还是某些 Ubuntu 软件包中预期的情况?有没有更好的安装方法(不需要手动创建链接)?
答案1
来自Debian 政策手册,它管辖这个:
将二进制文件或另一个共享库链接到共享库时,该共享库的 SONAME 未知。相反,共享库是通过查找与库名称匹配并附加 .so 的文件来找到的。该文件作为指向共享库的符号链接存在于文件系统上。
共享库通常分为几个二进制包。 SONAME 符号链接由运行时共享库包安装,裸 .so 符号链接安装在开发包中,因为它仅在链接二进制文件或共享库时使用。
因此,在liblz4-1
包含运行时库的包中,您liblz4.so.1.7.1
可以使用它已编译的二进制文件在开发包中,liblz4-dev
您有liblz4.so
符号链接,它允许链接器嵌入正确的引用编译它们时。
该liblz4-dev
包取决于运行时包的当前版本,因此符号链接不会悬空,并且当发行版发布需要更改SOVERSION
.
答案2
根据apt-file search liblz4.so
,安装它的软件包不是您选择的软件包,而是liblz4-dev
:
$ apt-file search liblz4.so
liblz4-1: /usr/lib/x86_64-linux-gnu/liblz4.so.1
liblz4-1: /usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
liblz4-1-dbg: /usr/lib/debug/usr/lib/x86_64-linux-gnu/liblz4.so.1.7.1
liblz4-dev: /usr/lib/x86_64-linux-gnu/liblz4.so
我不知道liblz4.so.1.7.1
和之间有什么区别(如果有的话) liblz4.so
;该搜索是在 Mint 19.3(仿生)上完成的。