Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for...

128
Polecenie make, tworzenie wlasnej biblioteki Przemyslaw Gawroński D-10, p. 234 Wyklad 12 21 maja 2020 (Wyklad 12) Polecenie make, tworzenie wlasnej biblioteki 21 maja 2020 1 / 31

Transcript of Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for...

Page 1: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 2: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 3: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 4: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 5: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 6: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 7: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 8: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 9: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 10: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 11: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 12: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 13: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 14: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 15: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 16: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 17: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 18: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 19: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 20: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 21: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 22: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 23: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 24: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 25: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 26: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 27: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 28: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 29: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 30: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 31: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 32: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 33: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 34: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 35: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 36: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 37: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 38: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 39: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 40: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 41: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 42: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 43: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 44: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 45: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 46: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 47: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 48: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 49: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 50: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 51: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 52: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 53: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 54: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 55: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 56: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 57: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 58: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 59: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 60: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 61: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 62: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 63: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 64: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 65: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 66: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 67: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 68: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 69: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 70: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 71: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 72: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 73: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 74: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 75: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 76: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 77: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 78: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 79: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 80: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 81: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 82: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 83: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 84: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 85: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 86: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 87: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 88: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 89: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 90: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 91: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 92: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 93: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 94: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 95: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 96: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 97: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 98: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 99: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 100: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 101: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 102: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 103: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 104: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 105: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 106: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 107: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 108: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 109: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 110: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 111: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 112: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 113: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 114: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 115: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 116: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 117: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 118: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 119: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 120: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 121: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 122: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 123: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 124: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 125: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 126: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 127: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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

Page 128: Przemysław Gawroński D-10, p. 234gawronski/pp_is_2020/... · 2020-05-21 · cppcheck - Tool for static C/C++ code analysis. Cppcheck is a command-line tool that tries to detect

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