Mam pytanie: Jak skompilować bibliotekę statyczną w Linuksie gcc
, tzn. Muszę skompilować swój kod źródłowy do pliku o nazwie out.a. Czy wystarczy po prostu skompilować się z poleceniem gcc -o out.a out.c
? Nie jestem do końca zaznajomiony z tym gcc
, mam nadzieję, że ktoś może mi pomóc.
c
gcc
static-libraries
Summer_More_More_Tea
źródło
źródło
Odpowiedzi:
Zobacz Tworzenie udostępnionej i statycznej biblioteki za pomocą kompilatora gnu [gcc]
-c
oznacza utworzenie pośredniego pliku obiektowego, a nie pliku wykonywalnego.Spowoduje to utworzenie biblioteki statycznej.
r
oznacza wstawianie z wymianą,c
tworzenie nowego archiwum is
pisanie indeksu. Jak zawsze, zobacz stronę podręcznika, aby uzyskać więcej informacji.źródło
Oto przykład pełnego pliku makefile:
makefile
wyjaśnienie pliku makefile:
target: prerequisites
- głowa reguły$@
- oznacza cel$^
- oznacza wszystkie warunki wstępne$<
- oznacza tylko pierwszy warunek wstępnyar
- narzędzie Linux do tworzenia, modyfikowania i wyodrębniania z archiwów. Więcej informacji na stronach podręcznika man . Opcje w tym przypadku oznaczają:r
- zastąp pliki istniejące w archiwumc
- utwórz archiwum, jeśli jeszcze nie istniejes
- utworzyć indeks plików obiektowych w archiwumPodsumowując : biblioteka statyczna w Linuksie to nic innego jak archiwum plików obiektowych.
main.c przy użyciu biblioteki lib
lib.h główny nagłówek libs
lib1.c pierwsze źródło lib
lib1.h odpowiedni nagłówek
lib2.c drugie źródło lib
lib2.h odpowiedni nagłówek
źródło
ar
potrzeba wyjaśnienia, gdyż jest to klucz do stworzenia biblioteki statycznej.ar
Program tworzy, modyfikuje i wyciągi z archiwów, które są pojedyncze pliki posiadający zbiór innych plików w strukturze, która umożliwia pobieranie plików oryginalnych.ar
tworzy indeks do symboli zdefiniowanych w relokowalnych modułach obiektów w archiwum, gdy określisz modyfikator s. (zobaczman ar
)c++
kompilator:#ifdef __cplusplus extern "C" { #endif . . . #ifdef __cplusplus } #endif
Wygeneruj pliki obiektów za pomocą gcc, a następnie użyj,
ar
aby spakować je w bibliotekę statyczną.źródło