lab3


do zdobycia: [0 pkt]
Interfejsy programowe systemów operacyjnych  laboratorium 3
Przypomnij sobie wiedzę, którą zdobyłeś na wykładzie w temacie programów nm i make.
W razie amnezji zajrzyj na http://tiny.pl/jh9b. Na dzisiejszym laboratorium zastosujemy tę
wiedzę w praktyce, aby zdobyć punkty na wejściówce (na kolejnych zajęciach).
Skopiuj zawartość katalogu ~jaca/IPSO/make (na olimpie) do katalogu w swoim katalogu
domowym. W środku znajdziesz cztery pliki będące modułami trywialnego programu:
main.cpp  program główny,
modul1.cpp  moduł w C++, dostarczający definicji funkcji f(double x),
modul2.c  moduł w C, dostarczający definicji g(double x),
modul3.f  moduł w FORTRANie, dostarczający definicji funkcji h(double x).
Zwróć uwagę na trzy rzeczy:
Funkcje wykorzystywane przez main.cpp muszą posiadać prototypy, tj. w momencie
kompilacji main.cpp kompilator musi mieć informację, że gdzieś (bo nie w main.cpp)
zostały zdefiniowane funkcje f, g, h. Do skompilowania main.cpp wystarcza informacja, że
te funkcje istnieją i mają takie a takie sygnatury. W przypadku funkcji w C++ wystarczy
podać jej prototyp, poprzedzając go kwalifikatorem extern. W przypadku funkcji w C i
w FORTRANie po extern piszemy "C", co instruuje kompilator że wołana funkcja nie jest
funkcją C++. Dodatkowo dla FORTRANu obowiązują inne zasady maglowania nazw, co
skutkuje  zazwyczaj  koniecznością dodania "_" (podkreślenia) po wszystkich nazwach
funkcji, stąd wywołanie h_() zamiast h().
FORTRAN przekazuje parametry przez adres, dlatego mimo że funkcja h() bierze argument
typu double deklarujemy ją jako h(double*) i wołamy analogicznie (nie przejmujemy się
tym niuansem, koncentrujemy się na make i nm).
Do każdego z modułów trzeba dobrać właściwy kompilator  programy w FORTRANie na
olimpie kompilujemy za pomocą g77, programy w C za pomocą gcc, programy w C++ za
pomocą g++. Linkowania dokonujemy za pomocą C++, aby automatycznie zostały włączone
biblioteki właściwe dla C++.
Pierwsza część Twojego zadania na dzisiaj to stworzenie pliku Makefile, dzięki któremu
będzie można skompilować cały program, wydając polecenie make. Posłuż się wzorem omawianym
na wykładzie. Sprawdz, czy Twój program kompiluje się i czy działa.
Sprawdz, jakie symbole zdefiniowane są wewnątrz każdego z plików wynikowych (*.o)
i samego programu po kompilacji, korzystając z nm. Zobacz jak wyglądają nazwy przemaglowane
(nm) i odmaglowane (nm -C). Które z kompilatorów maglują nazwy, a które nie? Sprawdz, czy po
kompilacji z opcją -g możliwe jest (za pomocą nm -lC) sprawdzenie numerów linii w których
zdefiniowane są konkretne symbole.
Na następnych zajęciach wykorzystasz przećwiczoną w praktyce wiedzę na wejściówce!
2007, Jacek Dziedzic; FTiMS, Politechnika Gdańska.


Wyszukiwarka

Podobne podstrony:
lab3 polowienia
Lab3
Hipua lab3 spr
lab3 PMUEM
WdA Lab3 Lukasz Skrodzki
pn10 Matlab lab3 Bubak
lab3 miernictwo
ZSW LAB3 4
Lab3 4 R1 lab34
LAB3 TEORIA
so lab3
sieci LAB3
lab3
lab3 568
lab3

więcej podobnych podstron