Unix: kompilator C i narzȩdzia pomocnicze



Podobne dokumenty
Wprowadzenie do systemów kontroli wersji

Wprowadzenie do systemów kontroli wersji

Funkcje systemu Unix

Uruchamianie SNNS. Po uruchomieniu. xgui & lub snns & pojawia si e okno. programu. Symulator sztucznych sieci neuronowych SNNS 1

Tworzenie oprogramowania

Konsolidacja (linking)

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

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

Tworzenie oprogramowania

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

Organizacja systemu plików

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

MentorGraphics ModelSim

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

SFML. (Simple and Fast Multimedia Library)

Functionalization. Jeszcze o funkcjach i strukturze projektu. Marcin Makowski. 3 grudnia Zak lad Chemii Teoretycznej UJ

Paradygmaty programowania. Paradygmaty programowania

Informatyka I. Wyk lad I. Wprowadzenie. Robert Muszyński Instytut Cybernetyki Technicznej Politechnika Wroc lawska

Paradygmaty programowania. Paradygmaty programowania

Systemy Operacyjne - Operacje na plikach

Rozdzia l 3. Laboratorium 3. danych zawierajac

WPROWADZENIE DO INFORMATYKI

Here comes the sun. Wyk lad niesystematyczny. Marcin Makowski. 24 października Zak lad Chemii Teoretycznej UJ

Fragment wykładu z języka C ( )

Projekty Zaliczeniowe Laboratorium Sieci Komputerowych

us lugi katalogowe? Czym różni si e serwer katalogowy od serwera bazy danych:

Systemy Operacyjne. Ćwiczenia

Programowanie Proceduralne

Zaawansowane programowanie w C++

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Konfiguracja historii plików

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Programowanie w asemblerze Linkowanie

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

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

Zadanie 2: Arytmetyka symboli

Instrukcja instalacji winbgim

Instalacja programów Ubuntu

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!

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Organizacja systemu plików

Programowanie niskopoziomowe

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

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

Wprowadzenie do biblioteki klas C++

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

Organizacja systemu plików

Pracownia komputerowa. Dariusz wardecki, wyk II

Programy użytkowe (utilities)

Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Konsola i interpreter poleceń

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

Schemat konstrukcja pliku Makefile

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Paradygmaty programowania

pozycja klucza - offset klucza w rekordzie flaga pliku tymczasowego czas utworzenia bież acy rozmiar - liczba bajtów w pliku

Zasoby, pliki graficzne

Wstęp do programowania

Dodatki. Dodatek A Octave. Język maszyn

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Instalacja programu. Omówienie programu. Jesteś tu: Bossa.pl

1 Zapoznanie się ze środowiskiem Xenomai.

Automatyzacja procesu publikowania w bibliotece cyfrowej

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Rozdział 1. Informacje ogólne

Kernel Kompilacja jądra

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

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

2 INSTALACJA OPROGRAMOWANIA. 3 3 GŁÓWNE OKNO PROGRAMU 3 4 MODUŁ OBSŁUGI ARCHIWUM 7

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

InsERT GT Własne COM 1.0

exams: Automatic Generation of Exams in R

Functionalization. Funkcje w C. Marcin Makowski. 30 listopada Zak lad Chemii Teoretycznej UJ

CVS system kontroli wersji

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

Niektóre katalogi są standardowymi katalogami zarezerwowanymi do użytku przez system. Znaczenie wybranych katalogów systemowych jest następujące:

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Instrukcja instalacji

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

Budowa i oprogramowanie komputerowych systemów sterowania. Laboratorium 4. Metody wymiany danych w systemach automatyki DDE

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

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

GNU GProf i GCov. przygotował: Krzysztof Jurczuk Politechnika Białostocka Wydział Informatyki Katedra Oprogramowania ul. Wiejska 45A Białystok

Weryfikatory, zasoby graficzne

Wprowadzenie do środowiska Qt Creator

aodczytywać zniegoza pomoc afunkcjiread, (niebuforowane funkcje wejścia/wyjścia). e sukcesem, to zwróci liczb, erzeczywiściezapisanychbajtów.

Instrukcja laboratoryjna cz.3

#include <stdio.h> #include <stdlib.h> // standardowe biblioteki

Normy wektorów i macierzy

Warsztaty AVR. Instalacja i konfiguracja środowiska Eclipse dla mikrokontrolerów AVR. Dariusz Wika

Zastosowanie Robotów. Ćwiczenie 6. Mariusz Janusz-Bielecki. laboratorium

Ekonomia matematyczna i dynamiczna optymalizacja

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

Trochę o plikach wsadowych (Windows)

Transkrypt:

Unix: kompilator C i narzȩdzia pomocnicze Witold Paluszyński witold.paluszynski@pwr.wroc.pl http://sequoia.ict.pwr.wroc.pl/ witold/ Copyright c 2001 2011 Witold Paluszyński All rights reserved. Niniejszy dokument zawiera materia ly do wyk ladu na temat systemu kompilatora C i narz edzi pomocniczych w systemie Unix. Jest on udost epniony pod warunkiem wykorzystania wy l acznie do w lasnych, prywatnych potrzeb i może być kopiowany wy l acznie w ca lości, razem z niniejsza strona tytu low a.

System kompilatora C prog.c: #include <stdio.h> #include fun.h int main(...) { fun.h: float fun(...); fun.c: #include <stdio.h> #include <math.h> #include fun.h float fun(...) { /usr/include/math.h cc c prog.c /usr/include/stdio.h cc c fun.c prog.o: fun.o: cc prog.o fun.o lm o prog prog: /usr/lib/libm.a /usr/lib/libc.so.1 wywo lanie pe lnej kompilacji: cc prog.c fun.c -lm -o prog cc -c prog.c cc -c fun.c cc prog.o fun.o -lm -o prog

Opcje wywo lania kompilatora C (wspólne) Tradycyjnie, kompilatory C rozpoznaja te opcje jednakowo: -onazwa umieść postać wynikowa kompilacji w pliku nazwa, domyślnie a.out dla postaci programu wykonywalnego, nazwazrodla.s dla postaci asemblerowej, i nazwazrodla.o dla postaci binarnej -c pomiń ostatnia faz e kompilacji (linker), nie twórz programu wynikowego, pozostaw postać binarna.o -g wpisz w program binarny dodatkowe informacje dla debuggera -lbib powoduje przegladanie przez linker biblioteki bib, w pliku o nazwie libbib.a lub libbib.so w kartotece /usr/lib lub w innych zdefiniowanych ścieżka linkera -S wykonaj tylko pierwsza faz e kompilacji do kodu asemblera.s -On wykonaj optymalizacj e kodu poziomu n (domyślnie poziom 2, który jest na ogó l bezpieczny) -w pomiń ostrzeżenia (opcja zwykle szkodliwa)

Opcje wywo lania kompilatorów (różne) Niestety, niektóre ważne i pożyteczne opcje wyst epuj a tylko dla niektórych kompilatorów, lub maja inna postać: -V wyświetlaj wywo lania kolejnych faz kompilacji (Sun cc) -v wyświetlaj wywo lania kolejnych faz kompilacji (HP cc, GNU gcc) -Xc ścis le przestrzeganie standardu ANSI C (Sun cc) -Aa ścis le przestrzeganie standardu ANSI C (HP cc) -ansi przestrzeganie standardu ANSI C (GNU gcc) -pedantic ścis le przestrzeganie standardu ANSI C (GNU gcc) -Wall wyświetlanie ostrzeżeń o wszelkich dziwnych konstrukcjach programowych (GNU gcc)

skrypt do kompilacji programu: cc -c prog.c cc -c fun.c cc prog.o fun.o -lm -o prog Narz edzie make specyfikacja Makefile: prog: prog.o fun.o cc prog.o fun.o -lm -o prog prog.o: prog.c fun.h cc -c prog.c fun.o: fun.c fun.h cc -c fun.c alternatywna specyfikacja Makefile: CC = gcc LDFLAGS = -lcurses prog: prog.o fun.o prog.o: prog.c fun.o: fun.c

make zasady ogólne make jest uogólnieniem skryptu do kompilacji pakietów wybierajacym tylko niezb edne do rekompilacji modu ly i w laściwe elementy kompilatora: u latwia kompilacj e pakietów sk ladaj acych si e z wielu cz eści, gdzie wprowadzenie poprawek powoduje konieczność rekompilacji niektórych tylko cz eści ca lego pakietu plik opisowy Makefile zawiera specyfikacj e zależności pomi edzy elementami pakietu, które nast epnie sa sprawdzane przez program make wzgl edem dat utworzenia odpowiednich plików gdy jakaś zależność nie jest zachowana, make produkuje ponownie dany obiekt (plik) wed lug regu l również zawartych w pliku Makefile make jest przygotowany do kompilacji programów w C i posiada wbudowany zestaw regu l dla kompilacji tych programów w l acznie z ca lym zestawem narz edzi Unixowych (np. yacc, lex), lecz równie dobrze nadaje si e do dowolnego przetwarzania pakietów o dowolnym charakterze (np. sk lad tekstu skomplikowanego dokumentu) dzi eki możliwości zdefiniowania odpowiednich regu l i poleceń

Przyk ladowy plik Makefile SHELL=/bin/sh.SUFFIXES:.txt.tex.dvi.ps.ps2.pdf.bib.bbl.idx.ind.txt.tex: /usr/bin/sed -f $(HOME)/lib/txt2cudzy.sed $< >$@.tex.dvi: latex $<.dvi.ps: dvips -T 11in,8.5in -t landscape $<.ps.ps2: psnup -2 $< $@ mgland2print $< $@.dvi.pdf: dvipdfm -l -p letter $*.bib.bbl: bibtex $*.idx.ind: makeindex $< all: upr_shell upr_tools upr_libs upr_jsys upr_llio upr_proc upr_advio upr.ps: upr.dvi upr.dvi: upr.tex

# pomijamy zaleznosc upr.dvi od upr.bbl i upr.ind bo powoduje petlenie upr.tex: upr.txt bib biblio: upr.bbl upr.bbl: upr.aux Unixprog.bib bibtex upr ind indeks index: upr.ind upr.ind: upr.idx upr.idx: upr.tex upr_shell: upr_shell.ps upr_shell.ps2 upr_shell.pdf upr_shell.ps: upr_shell.dvi upr_shell.ps2: upr_shell.ps upr_shell.pdf: upr_shell.dvi upr_shell.dvi: upr_shell.tex upr_shell.tex: upr_shell.txt upr_tools: upr_tools.ps upr_tools.ps2 upr_tools.pdf upr_tools.ps: upr_tools.dvi upr_tools.ps2: upr_tools.ps upr_tools.pdf: upr_tools.dvi upr_tools.dvi: upr_tools.tex upr_tools.tex: upr_tools.txt

upr_libs: upr_libs.ps upr_libs.ps2 upr_libs.pdf upr_libs.ps: upr_libs.dvi upr_libs.ps2: upr_libs.ps upr_libs.pdf: upr_libs.dvi upr_libs.dvi: upr_libs.tex upr_libs_intro.tex upr_libs_string.tex \ upr_libs_curses.tex upr_libs_search.tex upr_libs_ndbm.tex \ upr_libs_regcomp.tex upr_libs_crypt.tex upr_libs.tex: upr_libs.txt upr_libs_intro.tex: upr_libs_intro.txt upr_libs_string.tex: upr_libs_string.txt upr_libs_curses.tex: upr_libs_curses.txt upr_libs_search.tex: upr_libs_search.txt upr_libs_ndbm.tex: upr_libs_ndbm.txt upr_libs_regcomp.tex: upr_libs_regcomp.txt upr_libs_crypt.tex: upr_libs_crypt.txt upr_jsys: upr_jsys.ps upr_jsys.ps2 upr_jsys.pdf upr_jsys.ps: upr_jsys.dvi dvips -t a4 upr_jsys upr_jsys.pdf: upr_jsys.dvi upr_jsys.dvi: upr_jsys.tex upr_jsys.tex: upr_jsys.txt upr_llio: upr_llio.ps upr_llio.ps2 upr_llio.pdf upr_llio.ps: upr_llio.dvi

dvips -t a4 upr_llio upr_llio.pdf: upr_llio.dvi upr_llio.dvi: upr_llio.tex upr_llio.tex: upr_llio.txt upr_advio: upr_advio.ps upr_advio.ps2 upr_advio.pdf upr_advio.ps: upr_advio.dvi dvips -t a4 upr_advio upr_advio.pdf: upr_advio.dvi upr_advio.dvi: upr_advio.tex upr_advio.tex: upr_advio.txt upr_proc: upr_proc.ps upr_proc.ps2 upr_proc.pdf upr_proc.ps: upr_proc.dvi dvips -t a4 upr_proc upr_proc.ps2: upr_proc.ps psnup -pa4 -Pa4-2 upr_proc.ps upr_proc.ps2 upr_proc.pdf: upr_proc.dvi upr_proc.dvi: upr_proc.tex upr_proc.tex: upr_proc.txt upr_thr: upr_thr.ps upr_thr.ps2 upr_thr.pdf upr_thr.ps: upr_thr.dvi dvips -t a4 upr_thr upr_thr.ps2: upr_thr.ps

psnup -pa4 -Pa4-2 upr_thr.ps upr_thr.ps2 upr_thr.pdf: upr_thr.dvi upr_thr.dvi: upr_thr.tex upr_thr.tex: upr_thr.txt

System kontroli wersji RCS Funkcje systemu RCS (Revision Control System): pami etanie pe lnego zestawu archiwalnych wersji danego pliku z automatyczna numeracja wersji, dokumentacja i rejestracja czasu utworzenia i autora; dost ep do dowolnej wersji poprzez: numer, dat e, autora, badź nazw e, obs luga dodatkowych (bocznych) odga l ezień wersji pliku, koordynacja pracy pomi edzy wieloma programistami pracujacymi nad projektem poprzez ustawianie praw dost epu oraz mechanizm wypożyczania i zwracania plików, ograniczona możliwość automatycznego l aczenia dwóch różnych zmodyfikowanych wersji jednego pliku; powstanie takich wersji może być wynikiem nieporozumienia programistów, badź ch eci przeniesienia na jedna ga l aź rozwojowa pliku poprawek dokonanych na innej ga l ezi korzystanie z automatycznie aktualizowanych znaczników w plikach.

System RCS: polecenia ci przekazuje plik systemowi RCS, nadaje mu numer wersji (kolejny) oraz pobiera i prosi o podanie opisu dokonanej modyfikacji; oryginalny plik zostaje skasowany (z wyjatkiem ci -u lub ci -l, to ostatnie wywo lanie od razu blokuje plik do edycji) co pobiera plik z systemu RCS; z opcja -l również blokuje plik tak, że wypożyczona kopi e można edytować rlog wyświetla kompletna histori e pliku w l acznie z opisami istniejacych wersji i aktualnym stanem wypożyczenia pliku rcsdiff wyświetla różnice pomi edzy bieżacym plikiem a jego ostatnia wersja przechowywana przez system RCS rcsmerge s luży do po l aczenia dwóch zmodyfikowanych wersji jednego pliku rcs komenda administracyjna, s luży do modyfikacji ustawień

System RCS: przyk lad shasta-201> ci upr_shell.txt upr_shell.txt,v <-- upr_shell.txt enter description, terminated with single. or end of file: NOTE: This is NOT the log message! >> Prezentacja na temat Bourne shella i filtrow tekstowych >>. initial revision: 1.1 done shasta-202> ls -l upr_shell.txt upr_shell.txt: No such file or directory shasta-203> co -l upr_shell.txt upr_shell.txt,v --> upr_shell.txt revision 1.1 (locked) done shasta-206> ls -l upr_shell* -rw-r--r-- 1 witold gurus -rw-r--r-- 1 witold gurus -rw-r--r-- 1 witold gurus -rw-r--r-- 2 witold gurus -rw-r--r-- 2 witold gurus -rw-r--r-- 1 witold gurus -rw-r--r-- 1 witold gurus -rw-r--r-- 1 witold gurus -r--r--r-- 1 witold gurus 180 Nov 5 11:58 upr_shell.aux 41556 Nov 5 10:59 upr_shell.dvi 9681 Nov 5 11:58 upr_shell.log 129537 Nov 5 11:58 upr_shell.pdf 215917 Nov 5 10:59 upr_shell.ps 243737 Nov 5 10:59 upr_shell.ps2 30300 Nov 5 10:59 upr_shell.tex 30300 Nov 12 15:17 upr_shell.txt 30555 Nov 12 15:17 upr_shell.txt,v

shasta-207> rlog upr_shell.txt RCS file: upr_shell.txt,v Working file: upr_shell.txt head: 1.1 branch: locks: strict access list: symbolic names: keyword substitution: kv total revisions: 1; selected revisions: 1 description: Prezentacja na temat Bourne shella i filtrow tekstowych ---------------------------- revision 1.1 locked by: witold; date: 2003/11/12 14:17:50; author: witold; state: Exp; Initial revision ============================================================================= Cz esto użycie systemu RCS polega na utworzeniu podkartoteki o nazwie RCS, w której polecenia systemu RCS umieszczaja swoje archiwa, co pozwala np. na latw a archiwizacj e. Cz esto również każde wprowadzenie pliku do archiwum od razu zwiazane jest z zatrzymaniem jego oryginalnej wersji źród lowej do dalszej edycji przez autora: ci -l upr_shell.txt

Biblioteki programowe Biblioteka jest plikiem zawierajacym zbiór skompilowanych modu lów programowych.o w formacie, z którego linker może je wydobyć w czasie kompilacji jakiegoś programu, i wykorzystać funkcje i symbole potrzebne temu konkretnemu programowi. Biblioteki sa stosowane najcz eściej jako biblioteki systemowe, zawierajace wi eksz a liczb e modu lów, z którymi programista nie chcia lby mieć do czynienia indywidualnie. W podobnej roli jednak można również tworzyć biblioteki w lasne, gdy posiadamy zbiór modu lów i chcemy korzystać z nich, lub udost epnić je komuś, jako ca lość, nie wnikajac w którym module jest która funkcja, albo z których innych funkcji (i z jakich modu lów) ona korzysta.

Biblioteki programowe: przyk lad użycia Poniższy przyk lad zak lada, że istnieje biblioteka programowa w pliku ${HOME}/mylibs/liballmath.a zawierajaca funkcje matematyczne z dwóch binarnych modu lów programowych ${HOME}/mylibs/geometry.o i ${HOME}/mylibs/basicmath.o. Rozdzielona faza kompilacji bez linkowania, i linkowania programu z modu lami binarnymi, oraz z zawierajac a je wszystkie biblioteka, zadana jako bezwzgl edna ścieżka pliku biblioteki, oraz jako biblioteka z wykorzystaniem ścieżki wyszukiwania bibliotek linkera: # program compilation, no linking cc -c -o mymathprog.o mymathprog.c # version 1 - linking with binary object modules cc -o mymathprog mymathprog.o ${HOME}/mylibs/geometry.o \ ${HOME}/mylibs/basicmath.o # version 2 - linking with library file using full file path cc -o mymathprog mymathprog.o ${HOME}/mylibs/liballmath.a # version 3 - linking with library file using linker s search path cc -o mymathprog mymathprog.o -L ${HOME}/mylibs/ -lallmath.a

Biblioteki statyczne, dynamiczne, i wspó ldzielone Tradycyjny model tworzenia bibliotek uniksowych polega na zapisaniu ich w jednym pliku archiwum. Biblioteka może posiadać indeks, u latwiaj acy linkerowi wyszukanie i skompletowanie wszystkich modu lów i funkcji niezb ednych danemu programowi. Program zlinkowany z biblioteka statyczna zawiera w sobie ca ly niezb edny kod z tej biblioteki, i może np. być przeniesiony i uruchomiony na innym systemie, w którym dana biblioteka nie istnieje. Nowsze systemy posiadaja również mechanizmy dynamicznego linkowania bibliotek. Szczególnie przydatne sa biblioteki wspó ldzielone, wykorzystywane przez wiele procesów jednocześnie. Program zlinkowany z taka biblioteka nie zawiera w sobie jej kodu, a jedynie informacje o niej: nazw e, numer wersji, i lokalizacj e w systemie. W oczywisty sposób, plik binarny programu może być w ten sposób dużo mniejszy (np. jeśli korzysta z ogromnych bibliotek graficznych), ale w czasie wykonywania musi mieć dost ep do biblioteki dynamicznej. Oznacza to, że musi ona być obecna w systemie, w którym wykonywany jest program, a ponadto linker dynamiczny musi być w stanie znaleźć ja w tym systemie. Tworzenie bibliotek wspó ldzielonych wygl ada inaczej, i wymaga innych narz edzi, na różnych systemach i dla różnych kompilatorów.

Tworzenie bibliotek statycznych Tradycyjny model tworzenia bibliotek (statycznych) polega na zapisaniu skompilowanych modu lów.o we wspólnym pliku archiwum. Wykorzystuje si e do tego program archiwizacyjny ogólnego przeznaczenia ar tworzacy archiwum w pliku o nazwie zwyczajowo z końcówka.a. cc -c -o geometry.o geometry.c cc -c -o basicmath.o basicmath.c ar -r allmath.a basicmath.o geometry.o ranlib allmath.a Jedyny problem w powyższej procedurze wiaże si e z procesem kompletowania niezb ednych procedur w czasie linkowania programów przez linker, i koniecznościa wieloprzebiegowego czytania archiwum. Z tego wzgl edu wprowadzono indeksowanie biblioteki, i do tworzenia takiego indeksu s luży program ranlib, aczkolwiek jego użycie jest opcjonalne i przyczynia si e tylko do poprawienia szybkości linkowania. Nowsze wersje archiwizatora ar potrafi a tworzyć i aktualizować indeks archiwum, i obecnie zwykle nie stosuje si e programu ranlib.

Biblioteki dynamicznie ladowane i wspó ldzielone W systemach uniksowych istnieja dwa mechanizmy dynamicznego linkowania bibliotek: biblioteki dynamicznie ladowane (dynamically loaded libraries) i biblioteki wspóldzielone (shared object libraries). Biblioteki dynamicznie ladowane nie różnia si e od innych bibliotek pod wzgl edem struktury; każda biblioteka może być dynamicznie ladowana. Mechanizm dynamicznego ladowania pozwala na ich do l aczanie do programu na komend e, a nie w chwili startu programu. Umożliwia to implementacj e wtyczek, i/lub modu lów kompilowanych przez program ze źróde l na swój w lasny użytek. Dynamiczne ladowanie bibliotek jest podobne w systemach Solaris i Linux. Biblioteki wspó ldzielone (o specjalnym formacie, zwyczajowo w plikach z końcówka.so) maja dwie cechy różniace je od bibliotek statycznych. Po pierwsze, linker nie do l acza do tworzonego pliku programu binarnego kodu biblioteki, a jedynie informacje o niej: nazw e (która opcjonalnie może zawierać numer wersji biblioteki, jeśli dla danego programu ma to znaczenie), i lokalizacj e w systemie. W chwili startu programu uruchamiany jest linker dynamiczny, który musi odnaleźć bibliotek e na dysku, i za ladować ja do pami eci. Po drugie, kod biblioteki shared object jest ladowany do pami eci raz, i wspó ldzielony przez wszystkie procesy linkujace z dana biblioteka, co ma zasadnicze znaczenie jeśli w systemie wiele procesów korzysta z dużych bibliotek.

Tworzenie bibliotek wspó ldzielonych - Solaris/SunStudio W poniższym przyk ladzie najpierw kompilujemy w podkatalogu./lib plik źród lowy biblioteki wspó ldzielonej do modu lu binarnego mysharedlib.o, a nast epnie tworzymy bibliotek e wspó ldzielon a libmysharedlib.so.1 w tym samym podkatalogu. # compile library source file into a binary module (cd lib; cc -c -o mysharedlib.o mysharedlib.c) # link the library module into a shared object file ld -G -o lib/libmysharedlib.so.1 lib/mysharedlib.o # another way of doing the same cc -G -o lib/libmysharedlib.so.1 lib/mysharedlib.o # now arrange the "version 1" library file to be the default (cd lib; ln -s libmysharedlib.so.1 libmysharedlib.so) Linker ld tworzy biblioteki shared object po zadaniu opcji -G. Opcj e t e można również zadać programowi cc, który przekazuje ja linkerowi, jednak wywo luj ac linker za pośrednictwem programu cc należy przekazywać inne opcje linkerowi za pomoca opcji -W.

Tworzenie bibliotek wspó ldzielonych Linux/gcc Ponownie tworzymy w podkatalogu./lib bibliotek e wspó ldzielon a libmysharedlib.so.1 zawierajac a pojedynczy modu l binarny mysharedlib.o: Gnu linker (zwany pieszczotliwie collect2) podobnie tworzy biblioteki shared object po zadaniu opcji -G. W tym przypadku jednak wygodniej jest nie wywo lywać go bezpośrednio, a skorzystać z pośrednictwa programu gcc: # compile library source file into a binary module (cd lib; gcc -fpic -c mysharedlib.c) # link the library module into a shared object file gcc -shared -o lib/libmysharedlib.so.1 lib/mysharedlib.o # now arrange the "version 1" library file to be the default (cd lib; ln -s libmysharedlib.so.1 libmysharedlib.so) Wi ecej informacji: http://www.faqs.org/docs/linux-howto/program-library-howto.html

Biblioteki wspó ldzielone: wi ecej o nazwach i numerach wersji Biblioteki wspó ldzielone maja mechanizm numerów wersji. W przypadku pojedynczej, indywidualnie wykorzystywanej biblioteki, mechanizm ten może być zignorowany i ca lkowicie pomini ety. Jednak w przypadku, gdy biblioteki używa wiele programów, a jej twórca chce bez zmiany nazwy zmienić np. interfejs niektórych funkcji, i umożliwić jednoczesna prac e w systemie programów korzystajacych z wielu wersji biblioteki, ten mechanizm jest niezwykle przydatny. Polega on na tym, że biblioteki wspó ldzielone posiadaja nazw e tzw. SONAME, która sk lada si e z nazwy pliku biblioteki poczynajac od lib* a kończac na pojedynczym numerze wersji nast epuj acym po rozszerzeniu.so, czyli np..so.1. Nazwa SONAME nie jest jedyna nazwa biblioteki; linker musi odnaleźć jej plik przez nazw e kończac a si e na.so. Jednak jeśli nazwa SONAME jest zapisana w bibliotece, to jest nast epnie zapisywana we wszystkich programach oryginalnie z nia zlinkowanych, przez co w chwili startu każdego programu linker dynamiczny może odnaleźć wersj e biblioteki dla niego niezb edn a. # Solaris - nazwa SONAME zadana argumentem -h ld -G -h libmysharedlib.so.1 -o libmysharedlib.so.1 mysharedlib.o # Linux - nazwa SONAME zadana argumentem -soname linkera gcc -shared -o lib/libmysharedlib.so.1 -Wl,-soname,libmysharedlib.so.1 lib/mysharedli

Linkowanie z wykorzystaniem bibliotek shared object W poniższym przyk ladzie najpierw kompilujemy program mymain.c korzystajacy z biblioteki dynamicznej, a nast epnie linkujemy go z ta biblioteka z różnymi wariantami podawania ścieżki do biblioteki. # first compile our simple program into an object module cc -c mymain.c # and then link with the shared object previously created # version 1: path to the library not recorded during linking cc mymain.o -L lib/ -lmysharedlib # the following fails:./a.out # but this works: LD_LIBRARY_PATH=../a.out # version 2: relative path to the library stored in the binary file cc mymain.o -L lib/ -lmysharedlib -R lib/ # the following works./a.out # but this fails (cd lib;../a.out)

# version 3: absolute path to the library stored in the binary file cc mymain.o -L lib/ -lmysharedlib -R pwd /lib/ # anything works now./a.out (cd lib;../a.out) # version 4: like version 3, but library path in env.variable LD_RUN_PATH= pwd /lib/ cc mymain.o -L lib/ -lmysharedlib # again, anything works./a.out (cd lib;../a.out) # version 5: now use the particular version number of the library LD_RUN_PATH= pwd /lib/ cc mymain.o -L lib/ -lmysharedlib # anything works, as long as the required version of the library exists./a.out (cd lib;../a.out)