分享

如何理解Linux中的共享库?

 新潮看世界 2022-07-19 发布于北京

​在编程中,库是可以在程序中重用的预编译代码片段的分类。库为程序员简化了生活,因为它们提供了可重用的函数、例程、类、数据结构等(由另一个程序员编写) ,可以在程序中使用。

例如,如果您正在构建一个需要执行数学操作的应用程序,您不必为此创建新的数学函数,您可以简单地使用该编程语言库中的现有函数。

Linux 中的库包括 libc (标准 C 库)或 Glibc (标准 C 库的 GNU 版本)、 libcurl (多协议文件传输库)、 libcrypt (用于加密、哈希和 C 编码的库)等等。

Linux 支持两类库,即:

静态库-在编译时被静态地绑定到程序。

动态或共享库——在程序启动并加载到内存中时加载,并在运行时进行绑定。

动态库或共享库可以进一步分为:

动态链接库——这里程序与共享库链接,内核在执行时加载库(如果它不在内存中)。

动态加载库——程序通过调用库函数来获得完全控制权。

共享库命名约定

共享库有两种命名方式: 库名(a.k.a soname)和“文件名”(存储库代码的文件的绝对路径)。

例如,libc 的 soname 是 libc.so.6: 其中 lib 是前缀,c 是描述性名称,所以意味着共享对象,6是版本。它的文件名是:/lib64/libc.so.6。注意,soname 实际上是指向文件名的符号链接。

在 Linux 中定位共享库

共享库由 ld.so (或 ld.so.x)和 ld-linux 加载。So (或 ld-linux.so.x)程序,其中 x 是版本。在 Linux 中,/lib/ld-Linux.so.x 搜索并加载程序使用的所有共享库。

程序可以使用库名或文件名调用库,库路径存储库可以在文件系统中找到的目录。默认情况下,库位于/usr/local/lib、/usr/local/lib64、/usr/lib 和/usr/lib64中; 系统启动库位于/lib 和/lib64中。然而,程序员可以在自定义位置安装库。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多