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

Post on 16-Jul-2020

0 views 0 download

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

Polecenie make, tworzenie własnej biblioteki

Przemysław GawrońskiD-10, p. 234

Wykład 12

21 maja 2020

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 1 / 31

Outline

1 Wspomaganie procesu tworzenia oprogramowania

2 Dyrektywy kompilacji warunkowejPodział programu na pliki

3 make

4 Biblioteki statyczne

5 Biblioteki dynamiczne

6 Biblioteki ładowane dynamicznie

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 2 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Wspomaganie procesu tworzenia oprogramowania

IDE – Eclipse, NetBeans, Visual Studio, CodeBlocks, CodeLite,...

Edytor – vim, emacs, kate, ...

Kompilator – gcc, icc, ...

Debugger – gdb, ddd, ...

System kontroli wersji – Git is a fast, scalable, distributed revisioncontrol system with an unusually rich command set that providesboth high-level operations and full access to internals.

Automatyzacja procesu kompilacji – cmake, make - The makeutility will determine automatically which pieces of a large programneed to be recompiled, and issue the commands to recompile them.

cppcheck - Tool for static C/C++ code analysis. Cppcheck is acommand-line tool that tries to detect bugs that your C/C++compiler doesn’t see.

valgrind is a programming tool for memory debugging, memory leakdetection, and profiling.(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 3 / 31

Dyrektywy kompilacji warunkowej

Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”

Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif

Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.

Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31

Dyrektywy kompilacji warunkowej

Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”

Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif

Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.

Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31

Dyrektywy kompilacji warunkowej

Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”

Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif

Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.

Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31

Dyrektywy kompilacji warunkowej

Dyrektywy #ifdef i #ifndef oznaczają ”jeśli zdefiniowano” i ”jeślinie zdefiniowano”

Ogólna postać dyrektywy #ifndef:#ifndef nazwa-makra#define nazwa-makrasekwencja instrukcji#endif

Tylko jeśli nazwa-makra nie zostało uprzednio zdefiniowane zapomocą dyrektywy #define, wówczas ma miejsce kompilacja kodusekwencja instrukcji.

Wszelkie wyrażenia występujące po dyrektywach #endif sąignorowane.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 4 / 31

Podział programu na pliki

main.c lista.c lista.h#include "lista.h"

int main(void){node *head = i_i_b(NULL ,6);

...

return 0;}

#include "lista.h"

node *i_i_b(node *h, int n){...

}

#ifndef LISTA_H#define LISTA_H

#include <stdio.h>#include <stdlib.h>

typedef struct tnode {int value;struct tnode *next;} node;

node *i_i_b(node *, int);#endif

gcc -c main.c -Wall gcc -c lista.c -WallKonsolidacja:gcc -o lista.exe lista.o main.o

Kompilacja i konsolidacja:gcc -o lista.exe lista.c main.c -Wall

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 5 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:

Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:

Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -Wall

Kompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -Wall

Konsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:

make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

makefile

Zawartość pliku makefile:lista.exe: main.o lista.o

gcc -o lista.exe lista.o main.o -Walllista.o: lista.c lista.h

gcc -c lista.c -Wallmain.o: main.c lista.h

gcc -c main.c -Wall

Polecenie make uruchamia:Kompilacja: gcc -c main.c -WallKompilacja: gcc -c lista.c -WallKonsolidacja: gcc -o lista.exe lista.o main.o -Wall

Kolejne uruchomienia polecenia make:make: ’lista.exe’ jest aktualne.

make → selektywna kompilacja → konsolidacja.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 6 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].

Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.

komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

make

W pliku o nazwie makefile umieszczamy polecenia dla kompilatora.

Wszystkie linie zawierające polecenia gcc ... muszą zaczynać się odznaku tabulatora [TAB].Zawartość pliku makefile:

reguły jawne, np.

lista.exe: main.o lista.ogcc -o lista.exe lista.o main.o -Wall

reguły niejawne (domyślne), np.

main.o: lista.h

definicje zmiennych, np.

OBJECTS = main.o lista.orm $(OBJECTS)

komendy wyboru, dyrektywy, np. odczytanie innego pliku makefile.komentarze - każda linijka zaczynająca się znakiem #.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 7 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:

Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:

Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.c

Kompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.c

Konsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:OBJECTS = main.o lista.olista.exe: $(OBJECTS)

gcc -o lista.exe $(OBJECTS)lista.o: lista.hmain.o: lista.h.PHONY: cleanclean:

rm $(OBJECTS)

Polecenie make uruchamia:Kompilacja: cc -c -o main.o main.cKompilacja: cc -c -o lista.o lista.cKonsolidacja: gcc -o lista.exe main.o lista.o

Polecenie make clean uruchamia:Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 8 / 31

makefile - przykłady

Zawartość pliku makefile:# Source , Executable , Includes , Library DefinesINCL = lista.hSRC = lista.c main.cOBJ = $(SRC:.c=.o)LIBS =EXE = lista.exe

# Compiler , Linker DefinesCC = /usr/bin/gcc -10CFLAGS = -Wall -O2LIBPATH = -L.LDFLAGS = -o $(EXE) $(LIBPATH) $(LIBS)CFDEBUG = -Wall -g -DDEBUG $(LDFLAGS)RM = /bin/rm -f

# Compile%.o: %.c

$(CC) -c $(CFLAGS) $*.c

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 9 / 31

makefile - przykład cd

Zawartość pliku makefile:# Link$(EXE): $(OBJ)

$(CC) $(LDFLAGS) $(OBJ)$(OBJ): $(INCL)

# Create a gdb/dbx Capable Executabledebug:

$(CC) $(CFDEBUG) $(SRC)# Clean Up.PHONY:cleanclean:

$(RM) $(OBJ) core a.out

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 10 / 31

makefile - przykład cd

Polecenie make uruchamia:

Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:

Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c

Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:

Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.c

Konsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:

Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:

Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:

Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:

Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

makefile - przykład cd

Polecenie make uruchamia:Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.cKompilacja: /usr/bin/gcc-10 -c -Wall -O2 main.cKonsolidacja: /usr/bin/gcc-10 -o lista.exe -L. lista.o main.o

Polecenie make debug uruchamia:Kompilacja i konsolidacja:/usr/bin/gcc-10 -Wall -g -DDEBUG -o lista.exe -L. lista.c main.c

Polecenie make clean uruchamia:Usuwanie: rm main.o lista.o

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 11 / 31

Biblioteki statyczne

Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.

Tworzenie biblioteki statycznej:

1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31

Biblioteki statyczne

Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:

1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31

Biblioteki statyczne

Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c

2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31

Biblioteki statyczne

Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o

3 Indeksowanie biblioteki: ranlib liblista.a

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31

Biblioteki statyczne

Biblioteka statyczna - archiwum plików binarnych powstałych wwyniku kompilacji.Tworzenie biblioteki statycznej:1 Kompilacja: /usr/bin/gcc-10 -c -Wall -O2 lista.c2 Dodanie pliku do archiwum liblista.a: ar rcsv liblista.a lista.o3 Indeksowanie biblioteki: ranlib liblista.a

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 12 / 31

Biblioteki statyczne

Polecenie nm -s liblista.a wypisuje indeks biblioteki:

Archive index:insert item begin in lista.oinsert item end dwa in lista.oinsert item end in lista.oprint list in lista.odelete all in lista.odelete node in lista.ofind value in lista.osearch node in lista.oinsert item sort in lista.odel node in lista.o

lista.o:0000000000000290 T delete all00000000000002d0 T delete node0000000000000590 T del node00000000000003f0 T find value

U free0000000000000000 T insert item begin0000000000000180 T insert item end00000000000000b0 T insert item end dwa0000000000000470 T insert item sort

U mallocU printf

0000000000000240 T print list

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 13 / 31

Biblioteki statyczne - makefile - struktura katalogów

main.c

makefilelib

lista.clista.hmakefile

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 14 / 31

Biblioteki statyczne - makefile

CC = gcc -10AR = arRANLIB = ranlibCFLAGS = -Wall -Wunused -O2

OBJ = lista.oSRC = lista.cHDR = lista.hTARGET = liblista.a

$(TARGET): $(OBJ)$(AR) rcsv $(TARGET) $(OBJ)$(RANLIB) $(TARGET)rm -f $(OBJ)@echo $@ "IS READY !!!"

$(OBJ): $(HDR)%.o:%.c

$(CC) -c $(CFLAGS) $*.c

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 15 / 31

Biblioteki statyczne - makefile

OBJ = main.oSRC = main.cHDR = ./lib/lista.hLIBS = -llistaEXE = lista.exeOTHERS = ./lib/liblista.a

CC = gcc -10CFLAGS = -Wall -Wunused -O2LIBPATH = -L./lib/LDFLAGS = $(LIBPATH) $(LIBS) -static

$(EXE): $(OBJ) $(OTHERS)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"

$(OBJ): $(HDR)%.o:%.c

$(CC) -c $(CFLAGS) $*.c

$(OTHERS):cd ./lib; make

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 16 / 31

Biblioteki statyczne

Polecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.c

cd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; make

make[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’

gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.c

ar rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.o

a - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.o

ranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.a

rm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.o

liblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!

make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’

gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -static

rm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.o

lista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make static lib/lib’gcc-10 -c -Wall -Wunused -O2 lista.car rcsv liblista.a lista.oa - lista.oranlib liblista.arm -f lista.oliblista.a IS READY!!!make[1]: Opuszczenie katalogu ’make static lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista -staticrm -f main.olista.exe IS READY!!!

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 17 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki statyczne - ar

ar vq mylib.a myobj1.o myobj2.o - dołącz pliki myobj1.omyobj2.o do końca archiwum mylib.a

ar vt mylib.a - wypisz nazwę każdego pliku w archiwum wraz zatrybutami plików (prawa, timestamp, właściciel, grupa i rozmiar).

ar vr mylib.a myobj1.o myobj3.o - istniejące pliki (myobj1.o) sązastępowane ich nowymi wersjami, a nowe pliki (myobj3.o) sądodawane na koniec archiwum.

ar vrb myobj1.o mylib.a myobj4.o - umieszcza plik myobj4.o warchiwum mylib.a przed plikiem myobj1.o.

ar vru mylib.a myobj1.o - wstawia tylko te z wymienionych plików,które są nowsze od istniejących w archiwum plików o tych samychnazwach.

ar vd mylib.a myobj1.o - usuwa myobj1.o z archiwum.

ar vx mylib.a myobj1.o - wyciąga plik myobj1.o z archiwum.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 18 / 31

Biblioteki dynamiczne

Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.

Linkowanie dynamiczne:

ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31

Biblioteki dynamiczne

Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:

ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31

Biblioteki dynamiczne

Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:

ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.

mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31

Biblioteki dynamiczne

Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:

ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,

biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31

Biblioteki dynamiczne

Linkowanie dynamiczne - plik wykonywalny zawiera nazwy plików, zktórych kod odpowiednich funkcji bibliotecznych zostanie załadowanyw trakcie działania programu.Linkowanie dynamiczne:

ABI - Application Binary Interface - łatwa dystrybucja, instalacja idziałanie bez rekompilacji.mniejszy rozmiar pliku wykonywalnego,biblioteki dzielone (shared) - wszystkie programy działające w danejchwili dzielą jedną kopię załadowaną do pamięci w momenciepierwszego użycia.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 19 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:

1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,

2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,

2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne

Tworzenie biblioteki dynamicznej:1 Kompilacja: gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c,2 Tworzenie biblioteki gcc-10 -shared -o liblista.so lista.o.

Opcja -fPIC umożliwia stworzenie Position Independent Code.Biblioteki dynamiczne powinny używać adresów względnych,ponieważ mogą być wywoływane wielokrotnie.

Opcja -shared służy do stworzenia zależnej od architektury dzielonejbiblioteki dynamicznej.

Konsolidacja z biblioteką dynamiczną: gcc-10 -o lista.exe main.o-L./lib/ -llista

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 20 / 31

Biblioteki dynamiczne - makefile

CC = gcc -10

OBJ = lista.oSRC = lista.cHDR = lista.hTARGET = liblista.so

CFLAGS = -Wall -Wunused -O2LDFLAGS = -shared -o $(TARGET)

$(TARGET): $(OBJ)$(CC) $(LDFLAGS) $(OBJ)rm -f $(OBJ)@echo $@ "IS READY !!!"

$(OBJ): $(HDR)

%.o:%.c$(CC) -c $(CFLAGS) $*.c

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 21 / 31

Biblioteki dynamiczne - makefile

OBJ = main.oSRC = main.cHDR = ./lib/lista.hLIBS = -llistaEXE = lista.exeOTHERS = ./lib/liblista.so

CC = gcc -10CFLAGS = -Wall -Wunused -O2LIBPATH = -L./lib/LDFLAGS = $(LIBPATH) $(LIBS)

$(EXE): $(OBJ) $(OTHERS)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"

$(OBJ): $(HDR)%.o:%.c

$(CC) -c $(CFLAGS) $*.c

$(OTHERS):cd ./lib; make

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 22 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.c

cd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; make

make[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’

gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.c

gcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.o

rm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.o

liblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!

make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’

gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llista

rm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.o

lista.exe IS READY!!!Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.

Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)

liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not found

libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamicznePolecenie make uruchamia:

gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

Polecenie ldd - wyświetla zależności od obiektów dzielonych.Polecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => not foundlibc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

export LD LIBRARY PATH=/path/lib:$LD LIBRARY PATH(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 23 / 31

Biblioteki dynamiczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)

liblista.so => ./lib/liblista.so (0x00007ffd077dd000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31

Biblioteki dynamiczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => ./lib/liblista.so (0x00007ffd077dd000)

libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31

Biblioteki dynamiczne

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.ccd ./lib; makemake[1]: Wejście do katalogu ’make dynamic lib/lib’gcc-10 -c -fPIC -Wall -Wunused -O2 lista.cgcc-10 -shared -o liblista.so lista.orm -f lista.oliblista.so IS READY!!!make[1]: Opuszczenie katalogu ’make dynamic lib/lib’gcc-10 -o lista.exe main.o -L./lib/ -llistarm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff7f78f000)liblista.so => ./lib/liblista.so (0x00007ffd077dd000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f7d34641000)/lib64/ld-linux-x86-64.so.2 (0x00007f7d34a0c000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 24 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.

int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.

char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie

Funkcje obsługi dynamicznego ładowania bibliotek dla systemu Linuxz nagłówka dlfcn.h:

void *dlopen(const char *filename, int flag); - ładowanie bibliotekiz pliku filename.

RTLD LAZY - lazy binding. Symbole (adresy funkcji) są rozwiązywanew miarę potrzeb.RTLD NOW - wszystkie niezdefiniowane symbole z biblioteki sąrozwiązawane.

void *dlsym(void *handle, const char *symbol); - zwraca adressymbol z załadowanej biblioteki handle lub NULL w przypadkuniepowodzenia.int dlclose(void *handle); - zamyka/wyładowuje bilbliotekę handle.char *dlerror(void); - zwraca łańcuch z opisem ostatniego błędu.

Flaga dla konsolidatora -ldl.

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 25 / 31

Biblioteki ładowane dynamicznie - przykład - main.c

#include <dlfcn.h>#include <stdio.h>

typedef struct tnode{int value;struct tnode *next;

} node;

int main(void){void *mylib = dlopen("liblista.so", RTLD_LAZY);if (! mylib){fprintf(stderr , "%s\n", dlerror ());exit(EXIT_FAILURE);

}

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 26 / 31

Biblioteki ładowane dynamicznie - przykład - main.c

node *(* desk_iib)(node*, int) = dlsym(mylib , "insert_item_begin");char *error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);

}

void (* desk_pl)(node*) = dlsym(mylib , "print_list");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);

}(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 27 / 31

Biblioteki ładowane dynamicznie - przykład - main.c

node *(* desk_dl)(node*) = dlsym(mylib , "delete_all");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(mylib);exit(EXIT_FAILURE);

}dlerror (); /* Clear any existing error */

void *handle = dlopen("libm.so", RTLD_LAZY);if (! handle) {fprintf(stderr , "%s\n", dlerror ());exit(EXIT_FAILURE);

}

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 28 / 31

Biblioteki ładowane dynamicznie - przykład - main.c

double (*sq)(double) = dlsym(handle , "sqrt");error = dlerror ();if (error){fprintf(stderr , "%s\n", error);dlclose(handle);exit(EXIT_FAILURE);

}node *head=desk_iib(NULL , (*sq)(100.));head=desk_iib(head , sq (121.));head=desk_iib(head , sq (144.));desk_pl(head);desk_dl(head);

dlclose(mylib);dlclose(handle);return 0;

}(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 29 / 31

Biblioteki ładowane dynamicznie - przykład - makefile

OBJ = main.oSRC = main.cEXE = lista.exeLIBS = -ldl

CC = gcc -10

CFLAGS = -Wall -Wunused -O2LDFLAGS = $(LIBS)

$(EXE): $(OBJ)$(CC) -o $(EXE) $(OBJ) $(LDFLAGS)rm -f $(OBJ)@echo $@ "IS READY !!!"

%.o:%.c$(CC) -c $(CFLAGS) $*.c

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 30 / 31

Biblioteki ładowane dynamicznie - przykład

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff49dc8000)

libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31

Biblioteki ładowane dynamicznie - przykład

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff49dc8000)libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)

libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31

Biblioteki ładowane dynamicznie - przykład

Polecenie make uruchamia:gcc-10 -c -Wall -Wunused -O2 main.cgcc-10 -o lista.exe main.o -ldlrm -f main.olista.exe IS READY!!!

export LD LIBRARY PATH=‘pwd‘:$LD LIBRARY PATHPolecenie ldd lista.exe wypisuje:

linux-vdso.so.1 (0x00007fff49dc8000)libdl.so.2 => /lib/x86 64-linux-gnu/libdl.so.2(0x00007f702c8d2000)libc.so.6 => /lib/x86 64-linux-gnu/libc.so.6 (0x00007f702c529000)/lib64/ld-linux-x86-64.so.2 (0x00007f702caf8000)

(Wykład 12) Polecenie make, tworzenie własnej biblioteki 21 maja 2020 31 / 31