poniedziałek, 10 marca 2014

Tworzenie biblioteki dynamicznej - Linux

Chciałbym dzisiaj pokazać jak stworzyć oraz podlinkować stworzoną przez siebie bibliotekę dynamiczną.

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 main
Stwórzmy teraz bibliotekę dynamiczną.

1. Kompilacja programów funkcja1.cpp oraz funkcja2.cpp.
g++ -Wall -fPIC -c funkcja1.cpp funkcja2.cpp
Flaga -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   *.o
3.
ln -sf libctest.so.1.0 libctest.so.1
4.
ln -sf libctest.so.1.0 libctest.so
5. Kompilacja programu main.
g++ -Wall -L. main.cpp -lctest -o prog
6. Odpalenie.
LD_LIBRARY_PATH=. ./prog

Brak komentarzy:

Prześlij komentarz