statycznie połączone biblioteki nie mogą być ładowane w czasie wykonywania, ale muszą być włączone do pliku binarnego, gdy odwołuje się plik wykonywalny. Oznacza to, że wszystkie punkty wejścia do kodu w statycznie połączonej bibliotece są dobrze zdefiniowane, a ich adresy nie zmienią się w stosunku do początku kodu wykonywalnego (czyli "statycznego").
Przy dynamicznie ładowanych bibliotekach nie ma możliwości sprawdzenia, gdzie będzie kod, więc gdy biblioteka jest ładowana w czasie wykonywania, pewien nakład pracy związany z wydajnością jest niezbędny do "związania" załadowanego kodu. Zasadniczo, łączenie jest przenoszone do czasu działania, dlatego też jest czasami określane jako "późne wiązanie".
Które z poniższych ustawień chcesz zastosować, zależy od wymagań użytkownika. Jeśli potrzebujesz samodzielnego pliku wykonywalnego, który użytkownik może po prostu przeciągnąć i upuścić do swojego folderu aplikacji, nie martwiąc się o zależności, to statyczne połączenie bibliotek może być dobrym sposobem.
Jednak w przypadku większych skalowanych projektów, w aplikacjach, które zapewniają mnóstwo funkcji, może być zaporą i niepotrzebne ładowanie wszystkich funkcji naraz. Zapewnienie zestawu dynamicznie ładowanych bibliotek może zarówno oszczędzać pamięć, jak i skracać czas uruchamiania. Następnie, gdy użytkownik uzyskuje dostęp do funkcji, ładowany jest odpowiedni kod i ewentualnie funkcje, które nie były używane przez jakiś czas, mogą zostać rozładowane.
Dodatkowo, jeśli wprowadzisz zmiany w kodzie, możesz po prostu redystrybuować jedną lub dwie biblioteki, zamiast ponownej kompilacji i ponownego połączenia i ponownego rozpowszechnienia całego pliku wykonywalnego. Czy muszę wspomnieć o perspektywie wtyczek?
Różnice między dwoma powyższymi szablonami są subtelne. Obie kompilują C zgodnie ze standardem GNU99. Ale szablon C/C++ Library ustawia xcode do kompilacji C++ zgodnie ze standardem "C++/GNU ++ 0x". C++/GNU ++ 0x został później oficjalnie opublikowany jako C++/GNU ++ 11 w 2011 roku. Oba szablony domyślnie używają biblioteki libC++, ale szablon STL C++ pozwala ci wybrać link do starszej biblioteki libstdC++. Dlaczego miałbyś to zrobić? Jeśli twój kod łączy się z libC++, ale łączysz się także z innymi bibliotekami, które odwołują się do libstdC++, i masz do czynienia z konfliktowymi symbolami, możesz rozwiązać ten problem przez połączenie z libstdC++. Szablon biblioteki STL C++ Library pozwala również zażądać, aby kompilator przylgnął do standardu C++ 11, z wyłączeniem rozszerzeń GNU ++ 11, lub wrócić do C++/GNU ++ 98 (jeśli potrzebujesz skompilować starszy kod, dla przykład).
libC++ vs libstdC++ może? – Praetorian