为什么有些应用程序附带共享库?

Why do some applications ship with shared libraries?

我正在浏览 /usr/lib/x86_64-linux-gnu 并注意到某些应用程序(例如 gedit)附带共享对象文件。我理解为什么库附带共享库,但独立应用程序执行相同操作有什么优势?

如果有人想为这些应用程序编写插件,他们可以使用提供的 API,共享库可用。

此外,当您有多个可执行文件使用一个软件包中的库时,您可以通过同时提供一个共享库而不是将其静态链接到每个二进制文件来减小这些二进制文件的大小。

查看 gedit 示例,它带有以下共享库:

/usr/lib64/gedit/libgedit.so
/usr/lib64/gedit/plugins/libdocinfo.so
/usr/lib64/gedit/plugins/libfilebrowser.so
/usr/lib64/gedit/plugins/libmodelines.so
/usr/lib64/gedit/plugins/libsort.so
/usr/lib64/gedit/plugins/libspell.so
/usr/lib64/gedit/plugins/libtime.so

第一个 libgedit.so 用于可以重用 gedit 编辑器组件的其他应用程序。

其余的都是gedit的插件。虽然它们是与应用程序一起构建和分发的,但它们是独立的插件,gedit 也可以在没有它们的情况下工作。第 3 方插件也可能在那里。