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 polowieniaLab3Hipua lab3 sprlab3 PMUEMWdA Lab3 Lukasz Skrodzkipn10 Matlab lab3 Bubaklab3 miernictwoZSW LAB3 4Lab3 4 R1 lab34LAB3 TEORIAso lab3sieci LAB3lab3lab3 568lab3więcej podobnych podstron