lab3.pdf

(79 KB) Pobierz
1874430 UNPDF
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. Sprawdź, czy Twój program kompiluje się i czy działa.
Sprawdź, 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? Sprawdź, 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.
1874430.001.png
Zgłoś jeśli naruszono regulamin