Cóż, teraz, kiedy wspominasz o Uniksie, mogę dokładnie określić rozdzielczość symbolu.
Pliki wykonywalne mogą odwoływać się do jednostek, które nie są zdefiniowane w nich samych. Na przykład zmienne lub procedury w bibliotekach współdzielonych. Podmioty te są identyfikowane za pomocą zewnętrznych symboli. Plik wykonywalny może również posiadać wewnętrzne symbole, do których można odwoływać się z plików zewnętrznych - tak jak w przypadku bibliotek.
Rozdzielczość symboli w tym kontekście polega na tym, że po wczytaniu programu do pamięci, przypisanie odpowiednich adresów do wszystkich encji zewnętrznych, do których się odnosi. Oznacza to zmianę każdej pozycji w załadowanym programie, w której dokonano odniesienia do zewnętrznego symbolu.
Adresy te będą zależeć od tego, gdzie w pamięci został załadowany kod z symbolami zewnętrznymi.
W systemie Unix domyślnym trybem kompilacji programów jest używanie współdzielonej biblioteki systemów zamiast wstępnego łączenia wszystkich elementów niezbędnych w pliku wykonywalnym. Podczas kompilowania programu z gcc
, na przykład, przekazujesz flagę -static
, jeśli chcesz, aby została skompilowana statycznie, zamiast nierozwiązanych referencji symbolicznych.
Sprawdź "udostępnione biblioteki", aby uzyskać więcej informacji.
sens, dziękuję bardzo. Sprawdzę też "biblioteki współdzielone". Czy masz jakieś książki, które możesz polecić, aby dowiedzieć się więcej na ten temat? –
Najlepszą książką jaką znam na temat jest [_Linkers and Loaders_ przez John R. Levine] (http://rads.stackoverflow.com/amzn/click/1558604960). – alanc