Na początek coś na temat statycznej biblioteki (static library) - teoria.
Jest to rodzaj biblioteki, która łączona jest z programem wykonywalnym dopiero w momencie jego wykonania. Aby tego dokonać, system operacyjny komputera musi posiadać pewne funkcje, które umożliwiają łączenie dynamiczne.
Rozważmy 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
#include 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; }Gdybyśmy chcieli by zadziałał powyższy przykład należałoby skompilować wszystkie pliki:
g++ main.cpp funkcja1.cpp funkcja2.cpp -Wall -o mainStwórzmy teraz bibliotekę dynamiczną.
1. Kompilacja programów funkcja1.cpp oraz funkcja2.cpp.
g++ -Wall -fPIC -c funkcja1.cpp funkcja2.cppFlaga -Wall wyświetli wszystkie warningi podczas kompilacji. Utworzyły nam się pliki funkcja1.o oraz funkcja2.o.
2. Utworzenie biblioteki.
g++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 *.o3.
ln -sf libctest.so.1.0 libctest.so.14.
ln -sf libctest.so.1.0 libctest.so5. Kompilacja programu main.
g++ -Wall -L. main.cpp -lctest -o prog6. Odpalenie.
LD_LIBRARY_PATH=. ./prog