C/Biblioteki: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m →Zależności: problemy |
literówki, zbędne spacje |
||
Linia 1:
==Czym jest biblioteka==
Biblioteka
Cechy biblioteki
* składa się co najmniej z dwóch plików
* zawiera funkcje (deklaracje w nagłówkowym i definicje w binarnym
* w postaci pakietu (
==typy==
====wg sposobu wykorzystania ====
* statyczne (
** windows
** Unix
* dynamiczne<ref>[http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html Static, Shared Dynamic and Loadable Linux Libraries from yolinux]</ref>
** biblioteka łączona dynamicznie,
*** Unix
*** Windows
** biblioteki ładowane
==== wg autora ====
Linia 33:
==Ścieżka wyszukiwania ==
[[C/Używanie_kompilatora#GCC|Gcc]] w
/usr/local/include
Linia 40:
/usr/include
Możemy to sprawdzić za pomocą przełączników przy kompilacji
gcc c.c -v -c
przykładowy wynik
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
Linia 58 ⟶ 56:
End of search list.
Zmienna środowiskowa [[Bash#LD_LIBRARY_PATH|LD_LIBRARY_PATH]] zawiera [[C/Używanie_kompilatora#Scie.C5.BCki|ścieżki do katalogów]] bibliotek. Te katalogi kompilator będzie przeszukiwał w trakcie kompilacji:<ref>[http://stackoverflow.com/questions/558803/how-to-add-a-default-include-path-for-gcc-in-linux?rq=1
▲Zmienna środowiskowa [[Bash#LD_LIBRARY_PATH|LD_LIBRARY_PATH]] zawiera [[C/Używanie_kompilatora#Scie.C5.BCki|ścieżki do katalogów]] bibliotek. Te katalogi kompilator będzie przeszukiwał w trakcie kompilacji:<ref>[http://stackoverflow.com/questions/558803/how-to-add-a-default-include-path-for-gcc-in-linux?rq=1 stackoverflow :How to add a default include path for gcc in linux?]</ref>
LD_LIBRARY_PATH
W celu dopisania ścieżki do własnej biblioteki ustaw wartość zmiennej środowiskowej, na przykład w konsoli wpisz:
Linia 68 ⟶ 64:
Sprawdzamy jakie ścieżki są przeszukiwane
echo | gcc -Wp,-v -x c++ - -fsyntax-only
przykładowy wynik
<pre>
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/4.8"
Linia 96 ⟶ 90:
* pliku źródłowego, zawierającego ciała funkcji (plik z rozszerzeniem .c)
Biblioteka po skompilowaniu składa się z dwóch plików
* nagłówkowy (
* binarny (
===Budowa pliku nagłówkowego===
Linia 152 ⟶ 146:
Jak widać nasza pierwsza biblioteka działa.
=== Zmiana dostępu do funkcji i zmiennych (static i extern) ===
Język C, w przeciwieństwie do swego młodszego krewnego - C++ nie posiada praktycznie żadnych mechanizmów ochrony kodu biblioteki przed modyfikacjami. [[C++]] ma w swoim asortymencie m.in. sterowanie uprawnieniami różnych elementów klasy. Jednak programista, piszący program w C nie jest tak do końca bezradny. Autorzy C dali mu do ręki dwa narzędzia: '''extern''' oraz '''static'''. Pierwsze z tych słów kluczowych informuje kompilator, że dana funkcja lub zmienna istnieje, ale w innym miejscu, i zostanie dołączona do kodu programu w czasie łączenia go z biblioteką.
Linia 184 ⟶ 176:
Odwrotne działanie ma słowo kluczowe '''static''' użyte w tym kontekście (użyte wewnątrz bloku tworzy zmienną statyczną, więcej informacji w rozdziale [[C/Zmienne#static|Zmienne]]). Może ono odnosić się zarówno do zmiennych jak i do funkcji globalnych. Powoduje, że dana zmienna lub funkcja jest '''niedostępna''' na zewnątrz biblioteki<ref>Tak naprawdę całe "ukrycie" funkcji polega na zmianie niektórych danych w pliku z kodem binarnym danej biblioteki (pliku .o), przez co linker powoduje wygenerowanie komunikatu o błędzie w czasie łączenia biblioteki z programem.</ref>. Możemy dzięki temu ukryć np. funkcje, które używane są przez samą bibliotekę, by nie dało się ich wykorzystać przez '''extern'''.
==Rozwiązywanie problemów==
* ustal jaką bibliotekę potrzebujesz
Linia 192 ⟶ 182:
** jeśli nie to zainstaluj
* ścieżki
** gdzie jest zainstalowana biblioteka (
** gdzie kompilator/program wyszukuje biblioteki
** pokaż
===Zależności===
* ldd
* wyszukiwanie w kodzie <ref>[https://balau82.wordpress.com/2013/11/24/analyzing-c-source-files-dependencies-in-a-program/ analyzing-c-source-files-dependencies-in-a-program by balau82]</ref><noinclude>
{{Przypisy}}
{{Nawigacja|C|
|