Tworzenie własnej biblioteki statycznej stworzenie plików źródłowych :stackoverflow questions : how-can-i-create-and-use-my-own-static-library-in-c c pliku nagłówkowego dodanie numeru wersji biblioteki i numeru kompilacji (ang. build version) kompilacja plików źródłowychstackoverflow questions : how-to-compile-library-on-c-using-gcc do pliku objektowego (.so), za pomocą CMAKE utwórz plik archiwum libmylib.a za pomocą ar skopiuj bibliotekę do standardowego katalogu bibliotek : /usr/lib opcja : dodaj mylib.pcstackoverflow questions : best-practices-on-my-library-coded-in-c do /usr/local/lib/pkgconfig/ w celu rozpoznawania przez pkg-config zaimportuj bibliotekę do swojego programu : w kodzie programu dodaj #include dodaj opcje kompilatora : gcc -lmylib opublikuj kod na serwerze , np github lub gitlab

Przykład :http://stackoverflow.com/questions/33820287/using-header-files-in-c gcc -o library.o library.c gcc -o someother.o someother.c ar a libmylib.a library.o someother.o gcc c.c -lmylib

Jak sprawdzić listę funkcji w skompilowanej bibliotece ?

Za pomocą nm : stackoverflow question : is-there-any-way-to-list-all-functions-in-a-c-library

nm -D /usr/lib/libgme.so.0

Fragment przykładowego wyniku :

U __assert_fail 000000000024c110 A __bss_start U cos w __cxa_finalize U __cxa_guard_acquire U __cxa_guard_release U __cxa_pure_virtual 000000000024c110 A _edata 000000000024c1c0 A _end U fclose U feof 00000000000382a8 T _fini U floor U fmod

Ścieżka wyszukiwania i katalogi

Mamy do wyboru instalację w katalogach : standardowych niestandardowych ( własnych)

Domyślna standardowa lokalizacja : /usr/local/lib ( pliki binarne ) /usr/local/include ( pliki nagłówkowe )

Niestandardowe katalogi : /usr/local/include/mylib/ dla plików nagłówkowych /usr/local/lib/libmylib.a ( lub /usr/local/lib/libmylib.so dla bibliotek dynamicznych)

Inne:

C_INCLUDE_PATH=/your_include_path export C_INCLUDE_PATH

oraz dodanie do pliku ~/.bash_profile w przypadki BASH

oraz dodanie katalogu z plikiem binarnym :

-L

Sprawdzanie domyślnego katalogu :

echo $LD_LIBRARY_PATH

numer wersji

Zasady numerowania wersji numeracja wersji oprogramowaniawikipedia : Numeracja wersji oprogramowaniasemantic-versioningstackoverflow question : code-version-change-rules Cykl życia programu wikipedia : Cykl życia programu

w bibliotece statycznej Numer wersji w nazwie pliku : libmy.so.1.2 w łańcuchu ( string)stackoverflow question: how-to-store-a-version-number-in-a-static-library w strukturze w makro #ident ( dyrektywa gcc)

Tworzymy łańcuch:

char* library_version = { "Version: 1.3.6" };

sprawdzamy z konsoli :

strings library.a | grep Version | cut -d " " -f 2

#define MYLIB_MAJOR_VERSION 1 #define MYLIB_MINOR_VERSION 2 #define MYLIB_REVISION 3 #define MYLIB_VERSION "1.2.3" #define MYLIB_VERSION_CHECK(maj, min) ((maj==MYLIB_MAJOR_VERSION) && (min<=MYLIB_MINOR_VERSION))

struct { const char* string; const unsigned major; const unsigned minor; const unsigned revision; } mylib_version = { MYLIB_VERSION, MYLIB_MAJOR_VERSION, MYLIB_MINOR_VERSION, MYLIB_REVISION };

numer kompilacji za pomocą pliku version.cstackoverflow question: generating-library-version-and-build-version

Biblioteki dynamiczne dlclose, dlopen, dlmopen - open and close a shared object