Estou estrelando a página ld.so
de manual do meu sistema estável Debian. Atualmente afirma :
$ 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:
O que me surpreende é a última frase:
Os seguintes nomes são atualmente reconhecidos
Isso atualmente não é verdade (ou pelo menos não mais), já que tudo o que posso encontrar é isso:
% 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
É verdade que ld.so
magicamente encontrará uma biblioteca em -digamos- /usr/lib/sse2/
na minha máquina?
Referência:
% 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
Para completar, aqui está a mesma saída de um chroot de 32 bits:
% 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
Sim, vai, mas como você está em x86, apenas para binários de 32 bits. Veja, por exemplo , em qual biblioteca é
libspeex1
fornecida/usr/lib/i386-linux-gnu/
(para todos os sistemas x86 de 32 bits) e/usr/lib/i386-linux-gnu/sse2/
(para sistemas x86 de 32 bits com capacidade para SSE2). Outro exemplo é olibx264-160
que envia sua biblioteca em/usr/lib/i386-linux-gnu/
e/usr/lib/i386-linux-gnu/i686/sse2/
(para sistemas x86 de 32 bits compatíveis com i686 compatíveis com SSE2).Isso não depende da listagem dos diretórios relacionados à capacidade
ld.so.conf
etc.;ld.so
procura por subdiretórios de diretórios em seu caminho de pesquisa. Se você corrervocê verá os diretórios relacionados a recursos que são usados em seu sistema ( ou seja , eles contêm bibliotecas e
ldconfig
as conhece).Graças à ajuda de @stephen-kitt, descobri que também existem algumas "subpastas" não documentadas em x86_64.
Por exemplo:
Para referência:
Eu preenchi um relatório de bug para qualquer pessoa interessada: