Mam pytanie: Jak skompilować bibliotekę statyczną w systemie Linux z gcc, tj. Muszę skompilować mój kod źródłowy do pliku o nazwie out.a. Czy wystarczy skompilować z poleceniem gcc -o out.a out.c
? Nie znam gcc, mam nadzieję, że ktoś może mi pomóc.Jak skompilować bibliotekę statyczną w systemie Linux?
99
A
Odpowiedz
154
Zobacz Creating a shared and static library with the gnu compiler [gcc]
gcc -c -o out.o out.c
-c
znaczy utworzyć plik obiektu pośrednika, zamiast pliku wykonywalnego.
ar rcs libout.a out.o
To tworzy bibliotekę statyczną. r
oznacza wstawianie z wymianą, c
oznacza tworzenie nowego archiwum, a s
oznacza pisanie indeksu. Jak zawsze, zobacz man page, aby uzyskać więcej informacji.
9
Wygeneruj pliki obiektów za pomocą gcc, a następnie użyj ar
, aby połączyć je w bibliotekę statyczną.
50
Oto pełna makefile przykład:
makefile
TARGET = prog
$(TARGET): main.o lib.a
gcc $^ -o [email protected]
main.o: main.c
gcc -c $< -o [email protected]
lib.a: lib1.o lib2.o
ar rcs [email protected] $^
lib1.o: lib1.c lib1.h
gcc -c -o [email protected] $<
lib2.o: lib2.c lib2.h
gcc -c -o [email protected] $<
clean:
rm -f *.o *.a $(TARGET)
wyjaśniając makefile:
target: prerequisites
- szef reguły[email protected]
- czyli cel$^
- oznacza wszystkie warunki$<
- znaczy tylko pierwszy warunekar
- narzędzie Linux do tworzenia, modyfikowania i wyciąg z archiwum see the man pages for further information. Opcje w tym przypadku chodziłor
- zastąpić pliki istniejące wewnątrz archiwumc
- tworzenie archiwum, jeśli nie już istniejącys
- Tworzenie indeksu obiektowo plików do archiwum
Podsumowując:: Biblioteka statyczna pod Linuksem to nic innego jak archiwum plików obiektowych.
main.cpomocą lib
#include <stdio.h>
#include "lib.h"
int main (void)
{
fun1(10);
fun2(10);
return 0;
}
lib.hz bibliotekami główna rura
#ifndef LIB_H_INCLUDED
#define LIB_H_INCLUDED
#include "lib1.h"
#include "lib2.h"
#endif
LIB1.cpierwszy Ilb źródło
#include "lib1.h"
#include <stdio.h>
void fun1 (int x)
{
printf("%i\n",x);
}
lib1.hodpowiedni nagłówek
#ifndef LIB1_H_INCLUDED
#define LIB1_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun1 (int x);
#ifdef __cplusplus
}
#endif
#endif /* LIB1_H_INCLUDED */
lib2.csekund Ilb źródło
#include "lib2.h"
#include <stdio.h>
void fun2 (int x)
{
printf("%i\n",2*x);
}
lib2.hodpowiedni nagłówek
#ifndef LIB2_H_INCLUDED
#define LIB2_H_INCLUDED
#ifdef __cplusplus
extern “C” {
#endif
void fun2 (int x);
#ifdef __cplusplus
}
#endif
#endif /* LIB2_H_INCLUDED */
Powiązane problemy
- 1. dynamicznie ładujesz bibliotekę statyczną?
- 2. Jak skompilować bibliotekę statyczną (gruby) dla armv6, armv7 i i386
- 3. Jak skompilować kod objc w systemie Linux?
- 4. Jak mogę skompilować bibliotekę nDPI w systemie Windows?
- 5. Jak utworzyć bibliotekę statyczną z istniejącego środowiska w systemie iOS?
- 6. Jak zbudować bibliotekę statyczną o maksymalnej zgodności w systemie iOS?
- 7. Xamarin.Android: Jak połączyć bibliotekę statyczną?
- 8. ObjC: Jak skompilować bibliotekę statyczną, która zawiera opcjonalne klasy zależne od biblioteki innej firmy
- 9. Włączając bibliotekę statyczną wewnątrz dynamicznego frameworka w iOS
- 10. Dołącz bibliotekę statyczną ramach dyrektywy preprocesora
- 11. jak powiązać bibliotekę statyczną z biblioteką dynamiczną w gcc
- 12. Libtool tworzy tylko bibliotekę statyczną - potrzebuję obiektów współużytkowanych
- 13. CWprowadä: wiele podprojekty stosując taką samą statyczną bibliotekę
- 14. Jak skompilować bibliotekę natywną Androida w Studio Android?
- 15. Jak skompilować C++ pod Ubuntu Linux?
- 16. Facebook iOS SDK - Jak zbudować bibliotekę statyczną dla Xcode 4.3?
- 17. Powiąż bibliotekę statyczną z biblioteką współdzieloną JNI w Androidzie
- 18. Zbuduj bibliotekę statyczną w XCode 4 na iPhone'a Symulatora
- 19. Co jest przeciwieństwem "make install", czyli jak odinstalować bibliotekę w systemie Linux?
- 20. Jak skompilować zdarzenie klawiatury w systemie Linux za pomocą podsystemu wejściowego
- 21. Jak skompilować wiele plików .c i .h w gcc linux?
- 22. Jak złapać błąd segmentacji w systemie Linux?
- 23. Jak wywołać "cpuid" w systemie Linux?
- 24. Jak zatrzymać proces "nieprzerywanego" w systemie Linux?
- 25. Jak uruchomić plik binarny w systemie Linux
- 26. Jak zmienić hasło w systemie Linux?
- 27. Jak zainstalować węzeł-gyp w systemie Linux?
- 28. Jak rejestrować zużycie pamięci w systemie Linux?
- 29. Jak używać głośnika PC w systemie Linux?
- 30. Profilowanie wydajności w systemie Linux
Dziękuję za wyjaśnienie. –
najlepsze odpowiedzi to te z przykładami, świetną robotą :) – Youda008
to pomogłoby wskazać, co polecenia robią i co zamierzają osiągnąć. szczególnie w tym przypadku "ar" potrzebuje wyjaśnienia, ponieważ jest to klucz do stworzenia biblioteki statycznej. – Joost