Systemprogrammierung - AIN/2
Sommersemester 2024


Übungsaufgabe 6: Bibliotheken, Shell-Scripts, Makefiles

Abgabe bis 4./5.7.2024


Aufteilung in Verzeichnisse

Legen Sie ein neues Verzeichnis Aufgabe6 mit Unterverzeichnissen bin und lib an. Teilen Sie darin Ihr in Aufgabe 5 erstelltes Programm wie folgt auf:


Statische Bibliothek

Schreiben Sie im Unterverzeichnis lib ein Shell-Script build-static.sh, das für die drei Übersetzungseinheiten Objketdateien erzeugt und diese drei Objektdateien benotung.o, fachnote.o und fachnoten_liste.o dann in einer statischen Bibliothek libaufgabe6.a zusammenfasst. Das Skript soll die verwendeten Befehle auf der Konsole ausgeben und es soll sich beenden, sobald ein Kommando einen Fehlercode zurückgibt.

Verwenden Sie im Skript den g++ mit den empfohlenen Optionen zur Qualitätssicherung.

Führen Sie das Shell-Script aus und prüfen Sie, ob die erzeugte Bibliothek alle drei Übersetzungseinheiten enthält:

  ./build-static.sh
  ar t libaufgabe6.a

Lesen Sie nach, was die Option t bei ar bewirkt: man ar

Hinweis: sh verlangt Linux-Zeilenwechsel in Skriptdateien. Windows-Zeilenwechsel führen zu Fehlermeldungen.


Dynamische Bibliothek

Schreiben Sie im Unterverzeichnis lib ein Shell-Script build-dynamic.sh, das für die drei Übersetzungseinheiten wie zuvor mit dem g++ Objketdateien erzeugt und diese drei Objektdateien benotung.o, fachnote.o und fachnoten_liste.o dann in einer dynamischen Bibliothek libaufgabe6.so zusammenfasst. Das Skript soll die verwendeten Befehle auf der Konsole ausgeben und es soll sich beenden, sobald ein Kommando einen Fehlercode zurückgibt.

Hinweis: Auf den Laborrechnern müssen Sie zum Erzeugen der Objektdateien den g++ mit der Option -fpic aufrufen. Sonst lässt sich die dynamische Bibliothek nicht bauen. pic steht für position independent code. Achten Sie außerdem wie zuvor auf die empfohlenen Optionen zur Qualitätssicherung.

Führen Sie das Shell-Script aus und prüfen Sie, ob die erzeugte Bibliothek eine dynamische Bibliothek ist und Funktionen ihrer Übersetzungseinheiten enthält:

  ./build-dynamic.sh
  file libaufgabe6.so
  nm -gC libaufgabe6.so | grep 'benotung\|fachnote\|fachnoten_liste'

Lesen Sie nach, was die verwendeten Linux-Kommandos tun: man file, man nm, man grep


Makefiles

Erstellen Sie nacheinander die folgenden Makefiles:


Abgabe

Führen Sie Ihre Shell-Scripts und Makefiles vor.
Zeigen Sie das ausgefüllte Teilnahmeprotokoll.


Freiwillige Zusatzaufgabe (1 Bonuspunkt)



Prof. Dr. H. Drachenfels
Hochschule Konstanz - Impressum - Datenschutzerklärung
Letzte Änderung: 19.3.2024