przemysław gawroński d-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - tool for...
TRANSCRIPT
Polecenie make, tworzenie własnej biblioteki
Przemysław GawrońskiD-10, p. 234
Wykład 12
21 maja 2020
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 1 / 31
Outline
1 Wspomaganie procesu tworzenia oprogramowania
2 Dyrektywy kompilacji warunkowejPodział programu na pliki
3 make
4 Biblioteki statyczne
5 Biblioteki dynamiczne
6 Biblioteki ładowane dynamicznie
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 2 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Wspomaganie procesu tworzenia oprogramowania
IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...
Edytor – vim, emacs, kate, ...
Kompilator – gcc, icc, ...
Debugger – gdb, ddd, ...
System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.
Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.
cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.
valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31
Dyrektywy kompilacji warunkowej
Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”
Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif
Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.
Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31
Dyrektywy kompilacji warunkowej
Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”
Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif
Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.
Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31
Dyrektywy kompilacji warunkowej
Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”
Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif
Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.
Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31
Dyrektywy kompilacji warunkowej
Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”
Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif
Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.
Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31
Podział programu na pliki
main.c lista.c lista.h#include "lista.h"
int main(void){node *head = i_i_b(NULL ,6);
...
return 0;}
#include "lista.h"
node *i_i_b(node *h, int n){...
}
#ifndef LISTA_H#define LISTA_H
#include <stdio.h>#include <stdlib.h>
typedef struct tnode {int value;struct tnode *next;} node;
node *i_i_b(node *, int);#endif
gcc -c main.c -Wall gcc -c lista.c -WallKonsolidacja:gcc -o lista.exe lista.o main.o
Kompilacja i konsolidacja:gcc -o lista.exe lista.c main.c -Wall
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 5 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:
Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:
Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -Wall
Kompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -Wall
Konsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:
make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
makefile
Zawartość pliku makefile:lista.exe: main.o lista.o
gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h
gcc -c lista.c -Wallmain.o: main.c lista.h
gcc -c main.c -Wall
Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall
Kolejne uruchomienia polecenia make:make: ’lista.exe’ jest aktualne.
make → selektywna kompilacja → konsolidacja.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].
Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.
komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
make
W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.
Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:
reguły jawne, np.
lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall
reguły niejawne (domyślne), np.
main.o: lista.h
definicje zmiennych, np.
OBJECTS = main.o lista.orm $(OBJECTS)
komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:
Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:
Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.c
Kompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.c
Konsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)
gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:
rm $(OBJECTS)
Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o
Polecenie make clean uruchamia:Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31
makefile - przykłady
Zawartość pliku makefile:# Source , Executable , Includes , Library DefinesINCL = lista.hSRC = lista.c main.cOBJ = $(SRC:.c=.o)LIBS =EXE = lista.exe
# Compiler , Linker DefinesCC = /usr/bin/gcc -10CFLAGS = -Wall -O2LIBPATH = -L.LDFLAGS = -o $(EXE) $(LIBPATH) $(LIBS)CFDEBUG = -Wall -g -DDEBUG $(LDFLAGS)RM = /bin/rm -f
# Compile%.o: %.c
$(CC) -c $(CFLAGS) $*.c
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 9 / 31
makefile - przykład cd
Zawartość pliku makefile:# Link$(EXE): $(OBJ)
$(CC) $(LDFLAGS) $(OBJ)$(OBJ): $(INCL)
# Create a gdb/dbx Capable Executabledebug:
$(CC) $(CFDEBUG) $(SRC)# Clean Up.PHONY:cleanclean:
$(RM) $(OBJ) core a.out
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 10 / 31
makefile - przykład cd
Polecenie make uruchamia:
Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:
Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c
Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:
Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.c
Konsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:
Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:
Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:
Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:
Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
makefile - przykład cd
Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o
Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c
Polecenie make clean uruchamia:Usuwanie: rm main.o lista.o
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31
Biblioteki statyczne
Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.
Tworzenie biblioteki statycznej:
1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31
Biblioteki statyczne
Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:
1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31
Biblioteki statyczne
Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c
2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31
Biblioteki statyczne
Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o
3 Indeksowanie biblioteki: ranlib liblista.a
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31
Biblioteki statyczne
Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31
Biblioteki statyczne
Polecenie nm -s liblista.a wypisuje indeks biblioteki:
Archive index:insert item begin in lista.oinsert item end dwa in lista.oinsert item end in lista.oprint list in lista.odelete all in lista.odelete node in lista.ofind value in lista.osearch node in lista.oinsert item sort in lista.odel node in lista.o
lista.o:0000000000000290 T delete all00000000000002d0 T delete node0000000000000590 T del node00000000000003f0 T find value
U free0000000000000000 T insert item begin0000000000000180 T insert item end00000000000000b0 T insert item end dwa0000000000000470 T insert item sort
U mallocU printf
0000000000000240 T print list
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 13 / 31
Biblioteki statyczne - makefile - struktura katalogów
main.c
makefilelib
lista.clista.hmakefile
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 14 / 31
Biblioteki statyczne - makefile
CC = gcc -10AR = arRANLIB = ranlibCFLAGS = -Wall -Wunused -O2
OBJ = lista.oSRC = lista.cHDR = lista.hTARGET = liblista.a
$(TARGET): $(OBJ)$(AR) rcsv $(TARGET) $(OBJ)$(RANLIB) $(TARGET)rm -f $(OBJ)@echo $@ "IS READY !!!"
$(OBJ): $(HDR)%.o:%.c
$(CC) -c $(CFLAGS) $*.c
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 15 / 31
Biblioteki statyczne - makefile
OBJ = main.oSRC = main.cHDR = ./lib/lista.hLIBS = -llistaEXE = lista.exeOTHERS = ./lib/liblista.a
CC = gcc -10CFLAGS = -Wall -Wunused -O2LIBPATH = -L./lib/LDFLAGS = $(LIBPATH) $(LIBS) -static
$(EXE): $(OBJ) $(OTHERS)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"
$(OBJ): $(HDR)%.o:%.c
$(CC) -c $(CFLAGS) $*.c
$(OTHERS):cd ./lib; make
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 16 / 31
Biblioteki statyczne
Polecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.c
cd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; make
make[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’
gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.c
ar rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.o
a - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.o
ranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.a
rm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.o
liblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!
make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’
gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -static
rm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.o
lista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki statyczne - ar
ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a
ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).
ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.
ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.
ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.
ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.
ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31
Biblioteki dynamiczne
Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.
Linkowanie dynamiczne:
ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31
Biblioteki dynamiczne
Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:
ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31
Biblioteki dynamiczne
Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:
ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.
mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31
Biblioteki dynamiczne
Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:
ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,
biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31
Biblioteki dynamiczne
Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:
ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:
1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,
2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,
2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne
Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.
Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.
Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.
Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31
Biblioteki dynamiczne - makefile
CC = gcc -10
OBJ = lista.oSRC = lista.cHDR = lista.hTARGET = liblista.so
CFLAGS = -Wall -Wunused -O2LDFLAGS = -shared -o $(TARGET)
$(TARGET): $(OBJ)$(CC) $(LDFLAGS) $(OBJ)rm -f $(OBJ)@echo $@ "IS READY !!!"
$(OBJ): $(HDR)
%.o:%.c$(CC) -c $(CFLAGS) $*.c
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 21 / 31
Biblioteki dynamiczne - makefile
OBJ = main.oSRC = main.cHDR = ./lib/lista.hLIBS = -llistaEXE = lista.exeOTHERS = ./lib/liblista.so
CC = gcc -10CFLAGS = -Wall -Wunused -O2LIBPATH = -L./lib/LDFLAGS = $(LIBPATH) $(LIBS)
$(EXE): $(OBJ) $(OTHERS)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"
$(OBJ): $(HDR)%.o:%.c
$(CC) -c $(CFLAGS) $*.c
$(OTHERS):cd ./lib; make
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 22 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.c
cd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; make
make[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’
gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c
gcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.o
rm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.o
liblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!
make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’
gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista
rm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.o
lista.exe IS READY!!!Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.
Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)
liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not found
libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamicznePolecenie make uruchamia:
gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31
Biblioteki dynamiczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)
liblista.so => ./lib/liblista.so (0x00007ffd077dd000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31
Biblioteki dynamiczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => ./lib/liblista.so (0x00007ffd077dd000)
libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31
Biblioteki dynamiczne
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => ./lib/liblista.so (0x00007ffd077dd000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.
int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.
char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie
Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:
void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.
RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.
void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.
Flaga dla konsolidatora -ldl.
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31
Biblioteki ładowane dynamicznie - przykład - main.c
#include <dlfcn.h>#include <stdio.h>
typedef struct tnode{int value;struct tnode *next;
} node;
int main(void){void *mylib = dlopen("liblista.so", RTLD_LAZY);if (! mylib){fprintf(stderr , "%s\n", dlerror ());exit(EXIT_FAILURE);
}
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 26 / 31
Biblioteki ładowane dynamicznie - przykład - main.c
node *(* desk_iib)(node*, int) = dlsym(mylib , "insert_item_begin");char *error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);
}
void (* desk_pl)(node*) = dlsym(mylib , "print_list");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);
}(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 27 / 31
Biblioteki ładowane dynamicznie - przykład - main.c
node *(* desk_dl)(node*) = dlsym(mylib , "delete_all");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);
}dlerror (); /* Clear any existing error */
void *handle = dlopen("libm.so", RTLD_LAZY);if (! handle) {fprintf(stderr , "%s\n", dlerror ());exit(EXIT_FAILURE);
}
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 28 / 31
Biblioteki ładowane dynamicznie - przykład - main.c
double (*sq)(double) = dlsym(handle , "sqrt");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(handle);exit(EXIT_FAILURE);
}node *head=desk_iib(NULL , (*sq)(100.));head=desk_iib(head , sq (121.));head=desk_iib(head , sq (144.));desk_pl(head);desk_dl(head);
dlclose(mylib);dlclose(handle);return 0;
}(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 29 / 31
Biblioteki ładowane dynamicznie - przykład - makefile
OBJ = main.oSRC = main.cEXE = lista.exeLIBS = -ldl
CC = gcc -10
CFLAGS = -Wall -Wunused -O2LDFLAGS = $(LIBS)
$(EXE): $(OBJ)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"
%.o:%.c$(CC) -c $(CFLAGS) $*.c
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 30 / 31
Biblioteki ładowane dynamicznie - przykład
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff49dc8000)
libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31
Biblioteki ładowane dynamicznie - przykład
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff49dc8000)libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)
libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31
Biblioteki ładowane dynamicznie - przykład
Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!
export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:
linux-vdso.so.1 (0x00007fff49dc8000)libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)
(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31