To nie jest duplikat, ponieważ dotyczy osobliwości, którą zauważyłem, gdy używam /etc/ld.so.conf
.
Aby uzyskać ścieżki, w których dynamiczny linker szuka bibliotek, uruchamiam polecenie ldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"
. Kiedy /etc/ld.so.conf
nie ma na nim żadnych ścieżek. Dane wyjściowe z poprzedniego polecenia to
/lib
/usr/lib
Uznałem, że /lib
najpierw szuka, a potem /usr/lib
. Gdy dodam nową ścieżkę, taką jak /usr/local/lib
, do, /etc/ld.so.conf
a następnie przerób /etc/ld.so.cache
, dane wyjściowe ldconfig -v | grep -v "^"$'\t' | sed "s/:$//g"
stają się
/usr/local/lib
/lib
/usr/lib
Uważam to za dziwne, ponieważ jeśli mam rację, że kolejność przeszukiwania wymienionych katalogów jest od góry do dołu, wówczas dodatkowe katalogi są przeszukiwane przed /lib
i /usr/lib
. To, że dodatkowe katalogi są przeszukiwane, zanim zaufane katalogi same w sobie nie jest dziwne, ale kiedy /lib
jest przeszukiwane wcześniej /usr/lib
, jest to dziwne, ponieważ /bin
& /sbin
są wyszukiwane po /usr/bin
& /usr/sbin
in PATH
.
Nawet jeśli ścieżki wymienione przez ldconfig -v | grep -Ev "^"$'\t' | sed "s/:$//g"
byłyby przeszukiwane od dołu do góry, nadal byłoby to skośne porządkowanie, ponieważ dodatkowe katalogi byłyby przeszukiwane po zaufanych, podczas gdy /lib
byłyby przeszukiwane /usr/lib
.
Więc w jakiej kolejności ld.so
wyszukiwane są ścieżki bibliotek? Dlaczego jest /lib
przeszukiwany wcześniej /usr/lib
? Jeśli tak nie jest, to dlaczego wyszukiwane są dodatkowe katalogi /lib
?