动态地

这些也是共享库,并在需要时加载到内存中。
这意味着使用动态链接库编译的代码比静态链接的代码占用的内存更小。

共享库经常更新。
安装新库意味着我们需要维护依赖于这些库的软件。
我们这样做是为了避免或者解决依赖关系和冲突。

列出共享库

# ldd /bin/ls
        linux-vdso.so.1 =>  (0x00007fffa9bff000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003f64600000)
        librt.so.1 => /lib64/librt.so.1 (0x0000003f63600000)
        libcap.so.2 => /lib64/libcap.so.2 (0x0000003f66e00000)
        libacl.so.1 => /lib64/libacl.so.1 (0x0000003f6da00000)
        libc.so.6 => /lib64/libc.so.6 (0x0000003f62e00000)
        libdl.so.2 => /lib64/libdl.so.2 (0x0000003f62a00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003f62600000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003f63200000)
        libattr.so.1 => /lib64/libattr.so.1 (0x0000003f73200000)

手动安装库

要安装库文件,我们需要将文件复制到 /usr/lib中,然后运行 ldconfig(以 root 身份)。
它将在该目录中安装任何新库

# ldconfig -n -v /usr/lib

ldconfig创建必要的链接并缓存到在命令行指定的目录、文件 /etc/ld.so.conf和受信任的目录(/lib/usr/lib)。
缓存由运行时链接器,ld.so或者 ld-linux.so使用。
ldconfig 在确定应更新其链接的版本时,会检查它遇到的库的标头和文件名。

ldconfig 将尝试根据库所链接的 C 库(如果有)推断 ELF 库的类型(即,libc5或者 libc6/glibc)。

说明:

如果我们在非标准目录中安装库,则需要为 Red Hat Linux 添加此路径“LD_LIBRARY_PATH”,为 HP-UX 添加此路径“SHLIB_PATH”

我们可以使用以下命令添加路径(必须添加路径而不是 /usr/lib后跟冒号“:”)

对于红帽 Linux

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib

对于 HP-UX (Unix)

# export SHLIB_PATH=$SHLIB_PATH:/usr/lib:/usr/local/lib

为了使这些更改永久生效, 在 .bash_profile 中添加这些路径。

静态地

它们与程序一起编译以生成单个可执行代码。
这可以产生快速运行的可执行代码的优势。
然而,这个缺点是生成的代码往往很长,因此会使用大量的系统资源。

如何在 Linux 中手动安装库

共享库在很大程度上依赖于库的概念。
这些是被其他程序重新使用的软件集合。
这避免了必须为重复使用的函数重写代码。

可以通过两种方式链接软件库:

  • 静态地
  • 动态地
日期:2020-06-02 22:17:00 来源:oir作者:oir