Các thư viện động được tải bởi kernel, các đường dẫn không được mã hóa cứng trong một chương trình. Một chương trình chỉ nói "Tôi cần libc.so.6". Hệ thống sau đó tìm kiếm trong các đường dẫn thư viện như được định nghĩa trong /etc/ld.so.conf
, bao gồm /usr/lib
và /lib
theo mặc định. Tập tin này bao gồm các tập tin cấu hình bổ sung trong /etc/ld.so.conf.d
.
Trên hệ thống 64 bit của tôi, libc.so.6
có thể được tìm thấy /lib/x86_64-linux-gnu/libc.so.6
do đường dẫn được xác định trong /etc/ld.so.conf.d/x86_64-linux-gnu.conf
:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
Để tìm hiểu thư viện nào được tải bởi một chương trình, sử dụng ldd
như trong ldd /bin/bash
:
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
Đặt symlink sẽ không phá vỡ bất cứ điều gì.
Để có danh sách các thư mục được tìm kiếm, hãy chạy:
ldconfig -v -N | grep '^/'
-v
làm cho một danh sách các tập tin + thư mục được hiển thị, -N
ngăn bộ đệm ( /etc/ld.so.cache
) được tạo lại.