Mit Hilfe des Kommandos genso werden Shared Objects erzeugt.
Syntax
/usr/bin/genso
[optionen] [dateien] |
Optionen
genso unterstützt einige der für den POSIX-C-Compiler verwendeten Optionen; andere Optionen wurden von dem auf UNIX-Systemen verwendeten Kommando ld abgeleitet. |
Das Verzeichnis |
Nur in Verbindung mit Folgende Angabe sind möglich:
steht für TSOS
(Punkt) steht für die Benutzerkennung, unter der die Anwendung abläuft
wenn explizit eine BS2000-Benutzerkennung angegeben werden soll. Die Benutzerkennung muss dann in die Umgebungsvariable |
libxxx.a oder libxxx.so wird zum Erzeugen eines Shared Object verwendet. Welche Art von Bibliothek verwendet wird, hängt davon ab, ob |
Nur in Verbindung mit |
Nur in Verbindung mit |
Name des Shared Object, das erzeugt werden soll. Das Shared Object wird unter diesem Namen im aktuellen Verzeichnis abgelegt. Der Dateiname sollte auf .so enden; er wird nicht automatisch auf .so ergänzt. Um Missverständnisse zu vermeiden, werden die Endungen .o und .a abgewiesen. |
Von nun an werden PLAM-Bibliotheken verarbeitet. Zum Umschalten auf ar- oder so-Bibliotheken muss |
Wenn PLAM-Bibliotheken verarbeitet wurden, so wird nun auf ar-Bibliotheken bzw. so-Bibliotheken umgeschaltet. |
Der Inhalt des Shared Object wird auf stdout ausgegeben. Ist der Dateiname kein absoluter oder relativer Pfad, dann wird die Datei in den mit der Umgebungsvariablen LD_LIBRARY_PATH spezifizierten Verzeichnissen oder in /usr/lib gesucht. Bei der Anwendung auf eine Datei im aktuellen Verzeichnis ist also gegebenenfalls ein ./ voranzustellen, falls dieses Verzeichnis nicht in der Umgebungsvariablen LD_LIBRARY_PATH spezifiziert ist.
|
Gibt die Programmiersprache des nachzuladenden Objekts an. Mischungen sind möglich. Standardwert ist |
Wenn diese Option in der Kommandozeile angegeben wird, erhalten statische Bibliotheken (.a) Priorität gegenüber dynamischen (.so). |
Wenn diese Option in der Kommandozeile angegeben wird, erhalten dynamische Bibliotheken (.so) Priorität gegenüber statischen (.a). |
Die Adressauflösung findet beim Laden eines Objekts über dlopen() statt, und zwar in folgender Reihenfolge: (1) Geladenes Programm a.out (2) Alle Shared Objects, die vor dem zu ladenden Objekt geladen werden (RTLD_GLOBAL) (3) Zu ladendes Objekt
Die Adressauflösung findet in umgekehrter Reihenfolge statt (3 - 2 - 1). |
Dateien
Es können nur Dateinamen mit dem Namenssuffix .o (bzw. mit dem Namenssuffix .so bei Verwendung der -S option) angegeben werden. Ausführbare Dateien müssen ggf. umbenannt werden. Dateien können nur nach allen Optionen angegeben werden. |
Endestatus
Folgende Exit-Werte werden zurückgegeben:
0 | Generierung erfolgreich |
>0 | Fehler |
Datei
In dem Verzeichnis, in dem die Ausgabe generiert wird, wird ein temporäres Verzeichnis eingerichtet. Dieses Verzeichnis wird bei Beendigung des Kommandos wieder gelöscht.
Umgebung
Für die Suche nach Bibliotheksverzeichnissen gelten folgende Prioritäten:
- Verzeichnisse, die in der Variablen LD_LIBRARY_PATH enthalten sind. Werden dort mehrere Verzeichnisse angegeben, dann müssen diese durch einen Doppelpunkt getrennt sein (ohne Leerzeichen!).
- Verzeichnisse, die über die Option
-L
definiert sind
Beispiel 1
Es sollen vier Shared Libraries generiert werden: libtest21.so, libtest22.so, libtest23.so und libtest24.so.
Im aktuellen Verzeichnis befinden sich die o-Dateien test21.o, test22.o, test23.o und test24.o.
Die Shared Objects libtest23.so und libtest24.so bestehen jeweils nur aus den o-Dateien test23.o und test24.o.
Die Bibliothek libtest22.so besteht aus test22.o und dem abhängigen Shared Object libtest24.so; die Bibliothek libtest21.so besteht aus test21.o und den abhängigen Shared Objects libtest22.so und libtest23.so.
Für die Generierung der Shared Objects sind folgende Aufrufe von genso notwendig:
genso -o libtest24.so test24.o genso -o libtest23.so test23.o genso -o libtest22.so -l test24 test22.o genso -o libtest21.so -l test22 -l test23 test21.o
Mit der Option –S
kann man sich den Inhalt eines Shared Object ansehen.
$ genso -S low ./libtest21.so analysis of shared object ./libtest21.so shared object ./libtest21.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/test/reihentest/test21.o dep. shared object libtest22.so (/home/bach/dll/test/reihentest/libtest22.so) dep. shared object libtest23.so (/home/bach/dll/test/reihentest/libtest23.so) option: -X lang=c
Will man auch den Inhalt der abhängigen Bibliotheken sehen, so muss –S high
angegeben werden.
$ genso -S high ./libtest21.so analysis of shared object ./libtest21.so shared object ./libtest21.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/test/reihentest/test21.o dep. shared object libtest22.so (/home/bach/dll/test/reihentest/libtest22.so) dep. shared object libtest23.so (/home/bach/dll/test/reihentest/libtest23.so) option: -X lang=c analysis of shared object /home/bach/dll/test/reihentest/libtest22.so shared object /home/bach/dll/test/reihentest/libtest22.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/test/reihentest/test22.o dep. shared object libtest24.so (/home/bach/dll/test/reihentest/libtest24.so) option: -X lang=c analysis of shared object /home/bach/dll/test/reihentest/libtest24.so shared object /home/bach/dll/test/reihentest/libtest24.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/test/reihentest/test24.o option: -X lang=c analysis of shared object /home/bach/dll/test/reihentest/libtest23.so shared object /home/bach/dll/test/reihentest/libtest23.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/test/reihentest/test23.o option: -X lang=c
Beispiel 2
Es soll ein Shared Objekt libp1.so aus den folgenden Bestandteilen erzeugt werden:
aus dem Element UNTEST1.O aus der PLAM-Bibliothek $BACH.DL.LIB
aus allen Elementen der ar-Bibliothek libar.a und der o-Datei file1.o.
Das Kommando zur Generierung wird unter der Kennung $BACH aufgerufen und sieht folgendermaßen aus:
genso -o libp1.so -B plam -L . -lDL.LIB -m UNTEST1.O -B ar -L . -l ar file1.o
Dabei bedeutet -B plam -L . -lDL.LIB
, dass DL.LIB eine PLAM-Bibliothek ist, die sich in Benutzerkennung befindet, unter der genso aufgerufen wird.
Sieht man sich den Inhalt von libp1.so an, so erhält man:
$ genso -S low ./libp1.so analysis of shared object ./libp1.so shared object ./libp1.so consists of Grossmodul ofile_GM_.o built of objectmodule /home/bach/dll/newcommands/file1.o arlibrary /home/bach/dll/newcommands/libar.a with elements objectmodule arfile1.o objectmodule arfile2.o plam library dl.lib with elements UNTEST1.O option: -X lang=c