Czasami, gdy robię nm na pliku .so (na przykład libstdC++. So.6), nie ma symboli i muszę użyć nm --dynamic. Ale dla innych plików .so, widzę symbole bez - dynamicznego.Kiedy używać --dynamiczna opcja w nm
Doc mówi:
wyświetlić dynamiczne symbole zamiast normalne symbole. Ma to znaczenie tylko w przypadku obiektów dynamicznych, takich jak niektóre typy bibliotek współużytkowanych.
Ale to jest mylące ... jakie "rodzaje" bibliotek współdzielonych potrzebują - dynamiczne? Jak to się określa? Podczas kompilacji biblioteki? Myślałem, że wszystkie udostępnione biblioteki są dynamiczne (mam na myśli, mogą być ładowane dynamicznie w czasie wykonywania), ale wydaje się, że moje zrozumienie nie jest całkiem w porządku.
"Widoczność jest sprawdzana podczas etapu łączenia, a zatem jest wymuszana tylko dla bibliotek współdzielonych." Jaka jest w tym logika? Chyba miałeś zamiar powiedzieć "krok dynamicznego łączenia" w prawo? –
@ Hot.PxL - Jedna biblioteka współużytkowana może odnosić się do symboli wyeksportowanych z innych bibliotek współdzielonych (co jest dość powszechne). Chodziło mi o to, że widoczność symboli ma sens tylko dla bibliotek współdzielonych, a nie dla bibliotek statycznych. IIUC, ta kontrola jest wykonywana zarówno przez linker statyczny, jak i dynamiczny linker. Ale nie mogłem znaleźć odpowiedniego źródła, aby to potwierdzić. Udostępnij, jeśli znajdziesz. – Tuxdude