2010-04-29 19 views

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 warunek
  • ar - narzędzie Linux do tworzenia, modyfikowania i wyciąg z archiwum see the man pages for further information. Opcje w tym przypadku chodziło
    • r - zastąpić pliki istniejące wewnątrz archiwum
    • c - tworzenie archiwum, jeśli nie już istniejący
    • s - 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 */ 
+1

Dziękuję za wyjaśnienie. –

+4

najlepsze odpowiedzi to te z przykładami, świetną robotą :) – Youda008

+0

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

Powiązane problemy