Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Binden von Anwendungen in C und C++ mit Java und Green-Threads

&pagelevel(4)&pagelevel

Beim Binden der C/C++-Anwendung sind die im Abschnitt „Implementierung einer native Methode in C++" beschriebenen Binder-Optionen zu benutzen.

Mit JENV wird ein Laufzeit-Adapter zur Verfügung gestellt, der zu C/C++ -Anwendungen, die Java über das Invocation-API (Teil des JNI) aufrufen wollen, gebunden werden muss. Dieser Adapter enthält die Funktionen des Invocation-API sowie die Adapter zum threadfesten C- und C++ -Laufzeitsystem und zur threadfesten Socket-Bibliothek.

Der Laufzeit-Adapter liegt in einer optimierten Variante vor. Die Laufzeitsysteme befinden sich in PLAM-Bibliotheken, die Bestandteil des Lieferumfanges von JENV sind:

Für die S390-Variante:

SYSLNK.JENV.110.GREEN-JAVA

Für die X86-Variante:

SKULNK.JENV.110.GREEN-JAVA

Beim Binden einer Anwendung mit diesem Laufzeit-Adapter muss noch beachtet werden, dass er wegen der in Java vorkommenden langen Namen vom LLM-Typ 4 ist. Daher ist unbedingt die Compiler-Option -B llm4 beim Binden zu verwenden. Darüber hinaus ist zu beachten, dass der C-Compiler normalerweise beim Binden automatisch ein CRTE und im C++ -Fall eine Standard-Library bindet. Dies muss verhindert werden, damit keine Konflikte mit dem bereits im Laufzeit-Adapter enthaltenen threadfesten Laufzeitsystem entstehen. Dies wird mit dem Schalter -Kno_link_stdlibs erreicht. Ebenso darf aus gleichem Grund keine Socket-Bibliothek und keine Tools-Bibliothek explizit gebunden werden. Beim Binden dürfen daher niemals die Optionen -lc, -lsocket oder -ltools verwendet werden.

Unter POSIX kann eine C-Anwendung mit JENV folgendermaßen gebunden werden:

export BLSLIB00='$.SYSLNK.JENV.110.GREEN-JAVA' 
cc -Kno_link_stdlibs -B llm4 -o <program> \ 
    <objekte> -l BLSLIB 

Das gebundene Programm kann ohne weitere Vorkehrungen ausgeführt werden, benötigt aber natürlich zu seinem Ablauf ein vollständig installiertes JENV unter dem Standard-Installationspfad. Soll ein anderswo installiertes Java benutzt werden, so muss die Umgebungsvariable JAVA_HOME auf den Installationspfad der Java-Laufzeitumgebung gesetzt werden (siehe Kapitel „Umgebungsvariablen").

Das Kommando cc bindet den POSIX-Bindeschalter implizit dazu. Falls nicht unter der Shell mit Kommando cc gebunden wird, sondern unter der BS2000-Kommandooberfläche mit dem BINDER, so muss dieser Schalter aus $.SYSLNK.CRTE.POSIX dazugebunden werden.

Um mit dem BINDER das erforderliche LLM4-Format zu erhalten, muss, wenn auf einer OSD V3 produziert wird, bei SAVE-LLM der Operand FOR-BS2000-VERSIONS=*FROM-OSD-V4 angegeben werden. Die Objekte sind auch auf der OSD V3 ablauffähig.

Diese Vorgehensweise gilt analog für C++ -Anwendungen, wobei zum Binden das Kommando CC mit den oben angegebenen Optionen zu benutzen ist.

Eine Anwendung, die explizit die C-Schnittstellen der POSIX-Sockets aufruft, darf nicht die Module der Socket-Bibliothek einbinden, sondern muss den Modul LIBSOCKET aus der SYSLNK.JENV.110.GREEN (bzw. SKULNK.JENV.110.GREEN) mit einbinden.