Na początek coś na temat statycznej biblioteki (static library) - teoria.
Jest to biblioteka funkcji i podprogramów, która łączona jest z programem w momencie konsolidacji. W przypadku narzędzi dostarczonych przez Microsoft dla systemów z rodziny Windows pliki bibliotek mają zazwyczaj rozszerzenia .lib lub .obj, natomiast dla pakietów w systemach z rodziny Unix (np. GCC) i ich portach dla systemu Microsoftu (jakim jest np. MinGW) są to .a lub .o.
Rozważmy na początek pewien prosty przykład. Będziemy mieli łącznie trzy pliki. Dwa z prawie takimi samymi funkcjami oraz jeden plik z main-em programu.
Pierwszy plik - funkcja1.cpp
void funkcja1(int &p_arg1) { p_arg1 = 55; }Drugi plik - funkcja2.cpp
void funkcja2(int &p_arg1) { p_arg1 = 77; }Main programu - main.cpp
#includeGdybyśmy chcieli by zadziałał powyższy przykład należałoby skompilować wszystkie pliki:using namespace std; void funkcja1(int &p_arg1); void funkcja2(int &p_arg1); int main() { int l_liczba = 10; cout << "l_liczba = " << l_liczba << endl; funkcja1(l_liczba); cout << "l_liczba = " << l_liczba << endl; funkcja2(l_liczba); cout << "l_liczba = " << l_liczba << endl; return 0; }
g++ main.cpp funkcja1.cpp funkcja2.cpp -Wall -o mainStwórzmy teraz bibliotekę statyczną.
1. Skompilujmy pliki funkcja1.cpp oraz funkcja2.cpp.
g++ -Wall -c funkcja1.cpp funkcja2.cppFlaga -Wall wyświetli wszystkie warningi podczas kompilacji. Utworzyły nam się pliki funkcja1.o oraz funkcja2.o.
2. Czas stworzyć bibliotekę wydając komendę:
ar -cvq bibliotekaTestowa.a funkcja1.o funkcja2.oDzięki temu zabiegowi utworzył nam się plik/biblioteka:
bibliotekaTestowa.a3. Można wyświetlić całą zawartość nowo utworzonej biblioteki za pomocą komendy :
ar -t bibliotekaTestowa.a4. Na sam koniec pozostało przetestować naszą bibliotekę:
g++ -o [plik wykonywalny] main.cpp bibliotekaTestowa.a g++ -o main main.cpp bibliotekaTestowa.aIstnieje jeszcze druga możliwość. Jeżeli biblioteka znajduje się w innym katalogu to wystarczy:
g++ -o [plik wykonywalny] main.cpp [sciezka do katalogu]/bibliotekaTestowa.a g++ -o main main.cpp yy/bibliotekaTestowa.a
Na zakończenie:-)
Nota historyczna:
Kiedyś po utworzeniu biblioteki było konieczne, aby uruchomić polecenie: ranlib ctest.a. Ten stworzył tabelę symboli w archiwum. Ranlib jest teraz wbudowany w polecenie "ar".
Uwaga dla programistów MS / Windows: "." Linux / Unix biblioteka jest koncepcyjnie taka sama jak w Visual Studio C++ statyczne biblioteki "lib".
Brak komentarzy:
Prześlij komentarz