C++ WYKŁAD 12 (20.05.2015) Własne biblioteki. S PIS TREŚCI Kompilacja i łączenie Moduły Biblioteki Biblioteka statyczna Biblioteka współdzielona Biblioteka.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 9 ( ) Szablony.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
Programowanie obiektowe
Programowanie Wizualne WYKŁAD 4
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Static, const, volatile.
PROGRAMOWANIE STRUKTURALNE
Kurs Pascala – spis treści
Biblioteki i przestrzenie nazw
Ogólne jednostki programowe 1
SORTOWANIE (przykład zastosowania DMA)
Opcje kompilatora g77 g77 [opcje] pliki_źródłowe Opcje: -c tylko kompilacja bez linkowania -S kompilacja do kodu assemblera -E tylko pre-processing -o.
Java – programowanie obiektowe
Tworzenie nowej biblioteki
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Podstawy informatyki 2013/2014
Podstawy programowania
W SYSTEMIE OPERACYJNYM UNIX / LINUX
Podstawy programowania. Język C i C++– podstawy Temat: 1
Programowanie strukturalne i obiektowe
Programowanie obiektowe – zastosowanie języka Java SE
5 Etapów Pracy Kompilatora
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Maszyna wirtualna ang. virtual machine, VM.
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Przeglądanie zasobów komputera - uruchamianie programów
Podstawy informatyki 2013/2014
Programowanie obiektowe 2013/2014
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 9 ( )
Systemy operacyjne (wiosna 2014)
Programowanie w języku C++
Podstawy programowania
Programowanie strukturalne i obiektowe C++
C++.
XML Publisher Przedmiot i zakres szkolenia Przedmiot i zakres szkolenia Przeznaczenie XML Publisher Przeznaczenie XML Publisher Definiowanie Definiowanie.
K URS JĘZYKA C++ – WYKŁAD 10 ( ) Szablony.
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Programowanie strukturalne i obiektowe C++
Biblioteka DLL w oparciu o źródła w języku C
Kurs języka C++ – wykład 4 ( )
Programowanie strukturalne i obiektowe C++ Powtórzenie wiadomości z C++ Robert Nowak.
Formatowanie dokumentów
Wprowadzenie do programowania w Pascalu mgr inż. Agata Pacek.
Platforma .Net.
Podstawy programowania
Portal edukacyjny A.Ś. Tworzenie kwerend w programie Access.
obsługa wyświetlacza graficznego
Dokumentacja programu komputerowego i etapy tworzenia programów.
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Microsoft® Office Word
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
C++ WYKŁAD 13 ( ) Algorytmy. S PIS TREŚCI Funktory i predykaty Funkcje lambda.
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Przykłady zewnętrznych bibliotek do PHP Laboratorium z Baz Danych Łukasz Zubkowicz.
Optymalizacja programów Open-Source
Programowanie obiektowe – zastosowanie języka Java SE
Wprowadzenie do programowania obiektowego
Dynamiczny serwer aplikacyjny w C++ platforma LEFTHAND
Programowanie w Javie 1 Dr Robert Kowalczyk
Platforma LearningApps
Zapis prezentacji:

C++ WYKŁAD 12 ( ) Własne biblioteki

S PIS TREŚCI Kompilacja i łączenie Moduły Biblioteki Biblioteka statyczna Biblioteka współdzielona Biblioteka dynamiczna Tworzenie bibliotek Nazwy zewnętrzne

K OMPILACJA I ŁĄCZENIE Plik jako jednostka kompilacji. Preprocesing – obsługa makr i dyrektyw włączających – dostarcza kompilatorowi jednostkę translacji. Kompilator analizuje jednostkę translacji w izolacji od reszty programu. Fizyczna struktura programu (podział na pliki) powinna wynikać z logicznej struktury programu. Rola linkera przy budowaniu programu albo biblioteki.

M ODUŁY Każdy większy program składa się z pewnej liczby oddzielnych części – modułów. Moduł to kompletny fragment programu (moduł obliczeniowy, moduł we/wy, moduł prezentacji, itp). Podział kodu na moduły porządkuje logikę programu. Należy minimalizować zależności między modułami.

B IBLIOTEKI Moduły, z których może korzystać wiele programów umieszcza się w oddzielnych skompilowanych plikach, zwanych bibliotekami. Typy bibliotek w C++: biblioteka statyczna jest dołączana do programu wynikowego na etapie linkowania; biblioteka współdzielona jest dołączana do programu w trakcie ładowania programu do pamięci; biblioteka dynamiczna jest dołączana do uruchomionego procesu w trakcie działania programu.

B IBLIOTEKI Biblioteka to zbiór klas, funkcji i zmiennych, z których mogą korzystać różne programy. Biblioteka ma postać binarną – jej poszczególne fragmenty są skompilowane (biblioteka jest kolekcją plików obiektowych). Korzystanie z bibliotek ułatwia programowanie (korzystamy z gotowych i sprawdzonych fragmentów kodu) i przyspiesza proces rekompilacji.

B IBLIOTEKI Wynikiem samej kompilacji pliku źródłowego ( plik.c albo plik.cpp ) jest plik plik.o pod Linuxem albo plik.obj pod Windowsem. Biblioteki statyczne mają nazwy libmodul.a pod Linuxem albo modul.lib pod Windowsem. Biblioteki dynamiczne mają nazwy libmodul.so pod Linuxem (tak jak biblioteki współdzielone) albo modul.dll pod Windowsem.

B IBLIOTEKA STATYCZNA Używając biblioteki statycznej przekazujemy jej archiwum linkerowi w czasie kompilacji. Linker wyszukuje w nim tylko tych plików obiektowych, które są niezbędne do działania naszego programu i kopiuje je bezpośrednio do programu. Program wynikowy korzystający z biblioteki statycznej jest obszerniejszy ale szybciej się ładuje do pamięci. Program wynikowy zlinkowany z biblioteką statyczną jest niezależny od plików zewnętrznych. Uaktualnienie biblioteki wymaga rekompilacji programu.

B IBLIOTEKA STATYCZNA lib.cpp lib.o static library prog.cpp prog.o a.out memory linker loader g++ar g++ ssh

B IBLIOTEKA WSPÓŁDZIELONA Programy korzystające biblioteki współdzielonej nie zawierają bezpośrednio kodu z tej biblioteki a tylko referencję do niej. Program wynikowy korzystający z biblioteki współdzielonej jest chudszy ale wolniej ładuje się do pamięci (biblioteki współdzielone są odszukiwane i ładowane do pamięci razem z programem). Program wynikowy skompilowany z biblioteką współdzieloną jest zależny od plików zewnętrznych. Zmodyfikowanie biblioteki współdzielonej spowoduje zmianę w działaniu programu ale bez jego ponownej kompilacji.

B IBLIOTEKA WSPÓŁDZIELONA lib.cpp lib.o shared library prog.cpp prog.o a.out memory linker loader g++ ssh

B IBLIOTEKA DYNAMICZNA Programy korzystające bibliotek dynamicznych nie zawierają bezpośrednio kodu z tej biblioteki ale muszą korzystać ze specjalnych metod włączania takich bibliotek w trakcie działania programu (plik nagłówkowy ). Program wynikowy korzystający z biblioteki dynamicznej jest chudszy i szybciej ładuje się do pamięci, ale działa wolniej (biblioteki dynamiczne można załadować w dowolnym momencie w trakcie działania programu). Program wynikowy skompilowany z biblioteką dynamiczną jest zależny od plików zewnętrznych. Zmodyfikowanie biblioteki dynamicznej spowoduje zmianę w działaniu programu ale bez jego ponownej kompilacji.

B IBLIOTEKA DYNAMICZNA lib.cpp lib.o dynamic library prog.cpp prog.o a.out memory linker loader g++ ssha.out

T WORZENIE BIBLIOTEK ( POD L INUXEM ) Tworzenie programu bez dołączanych bibliotek. Załóżmy, że mamy pliki src1.cpp, src2.cpp i src3.cpp, które stanowią moduł obliczeniowy oraz plik prog.cpp, który będzie korzystał z funkcji i klas zdefiniowanych w module obliczeniowym. Aby skompilować cały program razem z modułem obliczeniowym należy wydać polecenie: $ g++ -Wall -ansi -pedantic src1.cpp src2.cpp src3.cpp prog.cpp -o calculation Aby skompilować cały program razem z modułem obliczeniowym i statycznie zlinkować z innymi bibliotekami (rozmiar programu wynikowego będzie znacznie większy) należy wydać polecenie: $ g++ -static … Aby uruchomić skompilowany program należy wydać polecenie: $./calculation Aby sprawdzić z jakimi bibliotekami jest linkowany program i jakie symbole są w nim użyte należy wydać polecenie: $ ldd calculation $ nm calculation

T WORZENIE BIBLIOTEK ( POD L INUXEM ) Program korzystający z biblioteki statycznej. Najpierw kompilujemy pliki źródłowe do plików obiektowych: $ g++ -c -Wall -ansi -pedantic src1.cpp src2.cpp src3.cpp Następnie łączymy pliki obiektowe do jednego pliku bibliotecznego libsrc.a : $ ar crs libsrc.a src1.o src2.o src3.o Na koniec należy skompilować plik z programem i zlinkować go z biblioteką: $ g++ -c -Wall -ansi -pedantic prog.cpp $ g++ -o calculation prog.o –L. –lsrc Teraz można uruchomić skompilowany program: $./calculation Wyjaśnienie: opcja -L ścieżka określa ścieżkę do biblioteki, opcja -l biblioteka określa nazwę biblioteki.

T WORZENIE BIBLIOTEK ( POD L INUXEM ) Program korzystający z biblioteki współdzielonej. Najpierw kompilujemy pliki źródłowe z opcją -fpic do plików obiektowych: $ g++ -fpic –c -Wall -ansi -pedantic src1.cpp src2.cpp src3.cpp Następnie łączymy pliki obiektowe do jednego pliku bibliotecznego libsrc.so : $ g++ –fpic -shared -o libsrc.so src1.o src2.o src3.o Na koniec należy skompilować plik z programem i wlinkować do niego informacje o bibliotece: $ g++ -Wall -ansi -pedantic prog.cpp $ g++ -o calculation prog.o –L. –lsrc Przed uruchomieniem programu trzeba zapisać w zmiennej środowiskowej LD_LIBRARY_PATH ścieżkę do biblioteki: $ export LD_LIBRARY_PATH= " LD_LIBRARY_PATH: ścieżka " Teraz można uruchomić skompilowany program: $./calculation

T WORZENIE BIBLIOTEK ( POD L INUXEM ) Program korzystający z biblioteki dynamicznej. Bibliotekę dynamiczną przygotowujemy tak samo jak bibliotekę współdzieloną libsrc.so : $ g++ -fpic –c -Wall -ansi -pedantic src1.cpp src2.cpp src3.cpp $ g++ –fpic -shared -o libsrc.so src1.o src2.o src3.o Na koniec należy skompilować plik z programem i dołączyć do niego dynamicznego linkera opcją -ldl : $ g++ -Wall -ansi -pedantic prog.cpp $ g++ -o calculation prog.o –ldl Teraz można uruchomić skompilowany program: $./calculation Wyjaśnienie: aby skorzystać z dynamicznego linkera należy do programu włączyć plik nagłówkowy ; aby załadować dynamiczną bibliotekę trzeba skorzystać z funkcji dlopen, dlsym, dlerror i dlclose.

N AZWY ZEWNĘTRZNE Nazwa jest łączona zewnętrznie jeśli można jej używać w jednostkach translacji innej niż ta, w której ją zdefiniowano. Nazwę zewnętrzną deklaruje się za pomocą słowa extern. Funkcja wbudowana musi być zdefiniowana w każdej jednostce translacji za pomocą identycznej definicji; ta sama reuła odnosi się do funkcji i klas szablonowych.

N OWOŚCI Z C++11 – SZABLONY ZEWNĘTRZNE I ALIASY SZABLONÓW C++ musi stworzyć instancję szablonu zawsze kiedy napotka w pełni określony szablon w jednostce translacyjnej. W starszym C++ nie jest bowiem możliwe wstrzymanie tworzenia instancji szablonu w takiej sytuacji. C++11 wprowadza ideę szablonów zewnętrznych w celu zablokowania tworzenia instancji w jednostce translacyjnej. Przykład: extern template class std::vector ; W C++11 można używać aliasów dla szablonów. Przykład: template using Vec = std::vector >;