Konsolidacja (linking)

Podobne dokumenty
Tworzenie oprogramowania

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie w asemblerze Linkowanie

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Funkcja (podprogram) void

Programowanie niskopoziomowe

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Programowanie w systemie Linux. Jacek Lach Zakład Oprogramowania Instytut Informatyki Politechnika Śląska

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

Wstęp do programowania

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Laboratorium 2: Biblioteki statyczne i dynamiczne w języku C. mgr inż. Arkadiusz Chrobot

Co nie powinno być umieszczane w plikach nagłówkowych:

Podział programu na moduły

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Narz«dzia do programowania w j«zyku C

Tworzenie oprogramowania

PROGRAMOWANIE w C prolog

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Informatyka I : Tworzenie projektu

Instrukcja instalacji winbgim

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

WPROWADZENIE DO INFORMATYKI

Wydział Elektrotechniki, Informatyki i Telekomunikacji. Instytut Informatyki i Elektroniki. Instrukcja do zajęć laboratoryjnych

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

PARADYGMATY PROGRAMOWANIA Wykład 4

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Programowanie Niskopoziomowe

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Wprowadzenie do biblioteki klas C++

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Java jako język programowania

Kompilacja i scalanie programów w linii poleceń gcc i make

Tworzenie oprogramowania

Sterowniki Programowalne (SP) Wykład 13

WYKŁAD 1 - KONSPEKT. Program wykładu:

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Wstęp do Programowania, laboratorium 02

Wskaźniki w C. Anna Gogolińska

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Język ludzki kod maszynowy

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Poprzedni wykład [ ] :

Podstawy programowania komputerów

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Środowisko Keil. Spis treści. Krzysztof Świentek. Systemy wbudowane. 1 Trochę teorii. 2 Keil

Podstawy programowania - 1

2 Przygotował: mgr inż. Maciej Lasota

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

PRZYDZIAŁ PAMIĘCI OPERACYJNEJ

Podstawy programowania

Podstawy informatyki

Fragment wykładu z języka C ( )

Języki programowania obiektowego Nieobiektowe elementy języka C++

Języki i metodyka programowania. Wprowadzenie do języka C

PMiK Programowanie Mikrokontrolera 8051

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Zmienne, stałe i operatory

Operacje wejścia/wyjścia odsłona pierwsza

Programowanie współbieżne... (10) Andrzej Baran 2010/11

I - Microsoft Visual Studio C++

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Języki i metody programowania I

Programowanie Niskopoziomowe

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Język C zajęcia nr 11. Funkcje

Komputery przemysłowe i systemy wbudowane

Instrukcja laboratoryjna cz.3

nowe operatory &. (kropka) * operator rzutowy ->, (przecinek) sizeof

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Smarty PHP. Leksykon kieszonkowy

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Programowanie Proceduralne

Programowanie strukturalne język C - wprowadzenie

Systemy Operacyjne. Ćwiczenia

Zarządzanie pamięcią operacyjną

Szablony klas, zastosowanie szablonów w programach

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Praktyka Programowania

Algorytm. a programowanie -

Programowanie Systemów Wbudowanych. GNU Toolchain i kompilacja skrośna. GNU Toolchain. Cross-compilation KSEM WETI PG.

Transkrypt:

Konsolidacja (linking) 1 Ostatni etap budowania programu PRE- PROCESSING KOMPILACJA ASEMBLACJA LINKING Łączenie osobnych fragmentów kodu maszynowego w plik wykonywalny Wykonywana przez linker ld w systemie Unix Często w sposób przezroczysty dla programisty (gcc samo się tym zajmuje)

Konsolidacje obejmuje... 2 Łączenie szeregu plików pośrednich (plików.o odpowiadających plikom.c files) w jeden plik Rozwiązywanie zewnętrznych odwołań do zmiennych i funkcji Generacja pliku wykonywalnego (jeżeli nie ma błędów) file1.c file1.o file2.c gcc file2.o Linker Executable filen.c Pliki nagłówkowe filen.o Odwołania zewnętrzne

Rozwiązywanie odwołań zewnętrznych 3 file1.c file2.c int count; void display(void); void main(void) { } count = 10; display(); Compiler file1.o file2.o z wypełniaczami Linker #include <stdio.h> extern int count; void display(void) { } printf( %d,count); file1.o ma wypełniacz dla display() file2.o ma wypełniacz dla count pliki pośrednie są relokowalne adresy są relatywnymi przesunięciami od początku pliku

Biblioteki 4 Definicja: plik zawierający funkcje które mogą być wykorzystywane przez program w języku C Cel: łatwy dostęp do wielokrotnie używanych funkcji promocja modularności kodu i ponownego użycia redukcja rozmiaru źródeł i pliku wykonywalnego

Biblioteki 5 Statyczne (Archiwa) libname.a w systemie Unix; name.lib w systemie DOS/Windows Tylko moduły do których są odwołania są dołączane podczas kompilacji przeciwnie niż w przypadku plików.o Linker kopiuje funkcje z biblioteki do pliku wykonywalnego Uaktualnienie biblioteki wymaga rekompilacji programu

Biblioteki 6 Dynamiczne (Shared Object or Dynamic Link Library) libname.so w systemie Unix; name.dll w systemie DOS/Windows Kod nie kopiowany do pliku wykonywalnego Ładowany do pamięci w momencie uruchomienia programu Mniejszy rozmiar pliku wykonywalnego Można uaktualnić bibliotekę bez rekompilacji programu Wada: nieco wolniejsze uruchomienie programu

Biblioteki 7 Dołączenie biblioteki statycznej crave.c pepsi.h /* crave source file */ #include pepsi.h int main(void) { FindPepsi(); DrinkPepsi(); }... /* Pepsi header file */ int FindPepsi(); int CravePepsi(); int DrinkPepsi(); libpepsi.a gcc... int FindPepsi()... { crave.o... }... int CravePepsi() Linker { } int DrinkPepsi() { } crave...

Biblioteki standardowe Standard ANSI C definiuje zestaw funkcji które muszą być wspierane przez kompilatory zgodne ze standardem Standardowe pliki nagłówkowe ANSI zawierają prototypy funkcji bibliotecznych: stdio.h, stdlib.h, string.h, time.h, signal.h, math.h, Standardowe biblioteki dołączane automatycznie podczas kompilacji Kompilatory mogą dostarczać dodatkowe biblioteki spoza standardu ANSI (np. graficzne) Unix: biblioteki standardowe często w katalogach /lib i /usr/lib 8

Tworzenie własnych bibliotek 9 Dlaczego: Kiedy mamy funkcje używane przez wiele różnych programów Kiedy chcemy udostępnić nasze funkcje innym programistom

Tworzenie własnych bibliotek 10 Jak: gromadzimy funkcje w jednym lub wielu plikach.c nie definiujemy funkcji main() umieszczamy prototypy w pliku nagłówkowym jeżeli używamy zmiennych globalnych niech bedą to zmienne statyczne tworzymy bibliotekę przy pomocy polecenia ar (Unix) ar narzędzie do tworzenia, modyfikacji, ekstrakcji z archiwum archiwum = zaindeksowana kolekcja plików pośrednich utrzymuje indeks symboli (funkcji, zmiennych) zdefiniowanych w plikach pośrednich dla szybszej pracy

Używanie ar 11 mylib1.c mylib2.c mylib.h Pliki źródłowe Kompilacja i asemblacja, ale bez konsolidacji gcc -c mylib1.c mylib2.c mylib1.o mylib2.o Pliki pośrednie Tworzenie archiwum ar rs libmylib.a mylib1.o mylib2.o Dołączenie wszystkich plików do archiwum Zapisanie/uaktualnienie indeksu symboli libmylib.a Biblioteka

Używanie ar ar operation[modifier] archive [list of files] (np. ar rs libmylib.a mylib1.o mylib2.o) Najczęstsze operacje d : usuń moduły p [list]: wypisz podane moduły na stdout r : wstaw lub zastąp t : wypisz tablicę modułów x : wypakuj moduły Możliwe dodatkowe modyfikatory do powyższych opcji np. rs : wstaw + uaktualnij indeks tv : dołącz czas utworzenia pliku, właściciela itd. libmylib.a Symbol index rsu : wstaw tylko uaktualnione moduły i uaktualnij indeks mylib1.o mylib2.o 12

Opcje bibliotek w gcc 13 -lname użyj biblioteki libname.a np.: gcc -o plot main.o plot_line.o -lm użyj libm.a kolejność plików.o i -l jest istotna! np.: gcc file1.c -lmylib file2.c może spowodować błąd linkera: Undefined symbol [file2.o] (W bibliotece wyszukiwane są tylko referencje dotąd nie rozwiązane) np.: gcc file1.c file2.c -lstop -lwalk może spowodować podobne błędy jeżeli if libwalk.a odwołuje się do funkcji w libstop.a

Opcje bibliotek w gcc 14 -Ldir dodaj dir do listy przeszukiwanych katalogów np.: gcc -o crave -L/home/libs crave.c -lpepsi Linker najpierw przeszukuje /home/libs a potem katalogi standardowe (/usr/lib, /lib w systemie Linux) Pozwala na zastąpienie bibliotek standardowych własnymi wersjami -nostdlib : nie używaj bibliotek standardowych -static : uzywaj wyłącznie bibliotek statycznych -shared : gdy to możliwe, używaj bibliotek dynamiczych -usymbol : udawaj że symbol jest niezdefiniowany w celu wymuszenia załadowania modułu

Linking statyczny i dynamiczny 15 pepsi.c crave.c pepsi.c crave.c pepsi.o gcc ar crave.o gcc gcc pepsi.o gcc gcc crave.o Static Library Linker Dynamic Library a.out Linker a.out Loader Loader Memory Memory

Tworzenie biblioteki dynamicznej Tworzenie biblioteki gcc -fpic -Wall -pedantic -c findpepsi.c gcc -fpic -Wall -pedantic -c drinkpepsi.c gcc -fpic -Wall -pedantic -c cravepepsi.c gcc -shared -Wl,-soname,libpepsi.so -o libpepsi.so findpepsi.o drinkpepsi.o cravepepsi.o Użycie biblioteki Linker poszukuje bibliotek dynamicznych w predefiniowanych katalogach systemowych Aby linker poszukiwał biblioteki dynamicznej w innym katalogu, należy ustawić zmienną środowiska LD_LIBRARY_PATH na ten katalog np. export LD_LIBRARY_PATH=. 16

Podsumowanie (konsolidacja + biblioteki) 17 Konsolidacja łączy kod z różnych plików w jeden plik wykonywalny rozwiązuje zewnętrzne odwołania Biblioteki dostarczają "usług" programom w miarę potrzeby Łącznie konsolidacja i biblioteki promują modularność i ponowne użycie kodu