Debian

Debian:令人困惑的 ld.so 聯機幫助頁文件

  • July 7, 2022

ld.so在我的 Debian 穩定係統上的手冊頁上擔任主角。它目前指出

$ man ld.so
[...]
NOTES
  Hardware capabilities
      Some shared objects are compiled using hardware-specific instructions which do not exist on every CPU.  Such objects should be installed in directories whose names define the required hardware ca‐
      pabilities, such as /usr/lib/sse2/.  The dynamic linker checks these directories against the hardware of the machine and selects the most suitable version of a given shared object.  Hardware capa‐
      bility directories can be cascaded to combine CPU features.  The list of supported hardware capability names depends on the CPU.  The following names are currently recognized:

讓我吃驚的是最後一句話:

目前可辨識以下名稱

目前這不是真的(或者至少現在不是了),因為我能找到的是:

% cat /etc/ld.so.conf.d/*
/usr/lib/x86_64-linux-gnu/libfakeroot
# Multiarch support
/usr/local/lib/i386-linux-gnu
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/usr/local/lib/i686-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
# libc default configuration
/usr/local/lib
# Multiarch support
/usr/local/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
# Legacy biarch compatibility support
/lib32
/usr/lib32
# Legacy biarch compatibility support
/libx32
/usr/libx32

真的會在我的機器上ld.so神奇地找到一個庫嗎?/usr/lib/sse2/

參考:

% apt-cache policy manpages
manpages:
 Installed: 5.10-1
 Candidate: 5.10-1
 Version table:
*** 5.10-1 500
       500 http://deb.debian.org/debian bullseye/main amd64 Packages
       500 http://deb.debian.org/debian bullseye/main i386 Packages
       100 /var/lib/dpkg/status

為了完整起見,這裡是靶心 32 位 chroot 的相同輸出:

% cat /etc/ld.so.conf.d/*
/usr/lib/i386-linux-gnu/libfakeroot
# Multiarch support
/usr/local/lib/i386-linux-gnu
/lib/i386-linux-gnu
/usr/lib/i386-linux-gnu
/usr/local/lib/i686-linux-gnu
/lib/i686-linux-gnu
/usr/lib/i686-linux-gnu
# libc default configuration
/usr/local/lib

是的,它會,但由於您使用的是 x86,因此僅適用於 32 位二進製文件。例如,請參閱libspeex1 哪個提供其庫/usr/lib/i386-linux-gnu/(適用於所有 32 位 x86 系統)和/usr/lib/i386-linux-gnu/sse2/(適用於支持 SSE2 的 32 位 x86 系統)。另一個例子是libx264-160 的庫在/usr/lib/i386-linux-gnu//usr/lib/i386-linux-gnu/i686/sse2/(對於支持 SSE2 的 i686 兼容的 32 位 x86 系統)。

這不依賴於在 etc. 中列出與能力相關的目錄ld.so.confld.so在其搜尋路徑上查找目錄的子目錄*。*如果你跑

/sbin/ldconfig -v 2>/dev/null | grep -A3 hwcap

您將看到在您的系統上使用的與功能相關的目錄(它們包含庫並ldconfig了解它們)。

引用自:https://unix.stackexchange.com/questions/708984