Biblioteki statyczne i współdzielone
Budowanie i linkowanie bibliotek
Biblioteki statyczne i współdzielone to bezpłatna lekcja C Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.
Czym jest biblioteka
Biblioteka to zbiór skompilowanych plików obiektowych, które można ponownie wykorzystywać w różnych programach bez każdorazowego ponownego kompilowania kodu źródłowego.
W języku C występują dwa rodzaje bibliotek:
- biblioteki statyczne (
.a), kopiowane do pliku wykonywalnego podczas konsolidacji - biblioteki współdzielone (
.so), ładowane w czasie wykonywania
Budowanie plików obiektowych
Oba rodzaje bibliotek zaczynają się od plików obiektowych. Należy jak zwykle skompilować pliki źródłowe z opcją -c.
Te pliki .o stanowią surowiec, który archiwizator lub konsolidator zapakuje do biblioteki.
gcc -c mathlib.c -o mathlib.o
gcc -c strlib.c -o strlib.oTworzenie biblioteki statycznej
Archiwizator ar łączy pliki obiektowe w archiwum .a. Konwencjonalna nazwa to lib<name>.a.
Flagi oznaczają: r — wstaw, c — utwórz w razie potrzeby, s — zapisz indeks.
ar rcs libmymath.a mathlib.o strlib.oKonsolidowanie biblioteki statycznej
Do konsolidacji należy użyć -L do wskazania katalogu wyszukiwania oraz -l do wskazania nazwy biblioteki (należy pominąć prefiks lib i przyrostek .a).
Potrzebny kod jest kopiowany do pliku wykonywalnego, który może następnie działać samodzielnie.
gcc main.c -L. -lmymath -o appKompromisy bibliotek statycznych
Konsolidowanie statyczne jest proste i samowystarczalne:
- Plik wykonywalny zawiera wszystko, więc nie ma zależności w czasie wykonywania
- Jednak każdy program przechowujący własną kopię ma większy rozmiar
- Naprawa błędu w bibliotece wymaga ponownej konsolidacji każdego programu, który z niej korzysta
Kod niezależny od położenia
Biblioteki współdzielone mogą być ładowane pod dowolny adres pamięci, dlatego ich kod musi być niezależny od położenia. Należy kompilować go z opcją -fPIC.
Powoduje to wygenerowanie kodu używającego adresowania względnego zamiast stałych adresów.
gcc -fPIC -c mathlib.c -o mathlib.o
gcc -fPIC -c strlib.c -o strlib.oTworzenie biblioteki współdzielonej
Plik .so należy zbudować z opcją -shared. Konwencjonalna nazwa to lib<name>.so.
W przeciwieństwie do archiwum statycznego jest to rzeczywiście skonsolidowany obiekt, który program ładujący może odwzorować w pamięci podczas działania programu.
gcc -shared mathlib.o strlib.o -o libmymath.soKonsolidowanie biblioteki współdzielonej
Konsolidowanie wygląda tak samo jak w przypadku biblioteki statycznej. Różnica polega na tym, że kod nie jest kopiowany do pliku wykonywalnego — zapisywane jest tylko odwołanie.
Plik wykonywalny pozostaje mały, ale od tej pory wymaga znalezienia libmymath.so w czasie wykonywania.
gcc main.c -L. -lmymath -o appZnajdowanie biblioteki w czasie wykonywania
Podczas uruchamiania dynamiczny program ładujący przeszukuje standardowe ścieżki w poszukiwaniu pliku .so. Biblioteka w bieżącym katalogu nie znajduje się na tej liście.
Do testów można wskazać ją programowi ładującemu za pomocą LD_LIBRARY_PATH (Linux).
LD_LIBRARY_PATH=. ./appKompromisy bibliotek współdzielonych
Biblioteki współdzielone zamieniają prostotę na elastyczność:
- Jedna kopia w pamięci jest współdzielona przez wiele programów, co oszczędza pamięć RAM i miejsce na dysku
- Naprawa błędu w pliku
.soprzynosi korzyść każdemu programowi bez ponownej konsolidacji - Program nie uruchomi się jednak, jeśli pliku
.sobrakuje lub jest niezgodny
To ostatnie zagrożenie jest klasycznym przykładem „dependency hell”, czyli piekła zależności.
Sprawdzanie zależności
Dwa narzędzia pomagają sprawdzić, z czym konsolidowany jest plik binarny:
ldd appwyświetla biblioteki współdzielone potrzebne programowi ładującemu w czasie wykonywanianm libmymath.awyświetla symbole (funkcje) znajdujące się w bibliotece
Jeśli ldd wyświetla „not found”, program ładujący nie może znaleźć tego pliku .so na swojej ścieżce wyszukiwania.
ldd app
nm libmymath.aSzybkie sprawdzenie
Dopasuj flagę do celu.
Podsumowanie
Potrafi już Pan/Pani budować i konsolidować oba rodzaje bibliotek:
- Statyczne:
ar rcs libX.a *.o; kod jest kopiowany do pliku binarnego, który jest samowystarczalny, ale większy - Współdzielone: kompilowane z
-fPIC, budowane z-shared, a kod ładowany w czasie wykonywania - Oba rodzaje konsoliduje się za pomocą
-Li-l; biblioteki współdzielone wymagają ścieżki wyszukiwania w czasie wykonywania, takiej jakLD_LIBRARY_PATH
Ma już Pan/Pani kompletny łańcuch narzędzi od preprocesora po budowanie.
Ucz się C dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 39
- Lekcje
- 144
Często zadawane pytania
Czy lekcja „Biblioteki statyczne i współdzielone” jest bezpłatna?
Tak — pełny tekst „Biblioteki statyczne i współdzielone” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Biblioteki statyczne i współdzielone”?
Budowanie i linkowanie bibliotek Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C Academy?
Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Biblioteki statyczne i współdzielone”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?
Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Kompilacja warunkowa
- Projekty wieloplikowe
- Makefile
- Biblioteki statyczne i współdzielone