Frage

ich habe eine dynamisch verknüpfte Bibliothek in zOS erstellen. Was sind die Optionen für die Compiler übergeben werden.

Auch, wie zu überprüfen, ob eine Bibliothek in zOS dynamisch verbunden ist [abhängig] auf anderen Bibliotheken. wir haben in Linux ldd, die diese Verbindung zeigt. Haben wir eine 'ldd' gleichwertig in zOS Land haben?

War es hilfreich?

Lösung

Sie es nicht direkt sagen, aber ich nehme meinen Sie eine C / C ++ DLL. Sie können Bibliotheken haben auch in anderen Sprachen geteilt (auch Assembler), aber die Schritte unterschiedlich sein würde.

Zunächst müssen Sie entscheiden, was Sie exportieren möchten. Viele der IBM Beispiele verwenden den Compiler ExportAll Direktive, aber bewusst sein, dies zu sehr langsam ausführbare Dateien führen kann, abhängig von Ihrem Coding-Style. Wenn Sie nicht ExportAll tun, werden Sie #pragma Export für alles (Code oder Daten) benötigen Sie exportieren möchten. Vergessen Sie nicht, Sie Daten (Variablen) sowie ausführbare Funktionen exportieren kann ... manchmal müssen Sie dies zum Austausch von Daten mit DLL-Funktionen.

Dann müssen Sie auf Ihrem Kompilierungsoptionen auf beide Client (Anrufer) und DLL die DLL-Verknüpfung zu verwenden ... Dies ist die -Wc, DLL kompiliert wurde und wenn sie aktiviert ist, erzeugt er zusätzliche Logik in Ihrem Programm zu laden und die DLL zu verwalten. Es ist eine gute Idee, auch #pragma CSECT- für die exportierten Funktionen enthalten, wenn Sie denken, dass Sie jemals die Notwendigkeit, ohne die DLL zu aktualisieren wird es vollständig zu ersetzen.

Wenn Sie Ihre DLL verknüpfen, sollten Sie die -Wl, DLL-Option angeben (es gibt viele Möglichkeiten ... dieser Teil ist anders, wenn Sie im Batch-Link - ich nehme an, Sie sind Gebäude in einer Make-Datei von einer Art). Der Link wird die tatsächliche DLL, sowie ein „Seitendeck“ mit „IMPORT“ Aussagen für alle Ihre exportierten Funktionen erzeugen. Sie werden diese benötigen eine der clientseitigen Programme zu verknüpfen, dass Sie erwarten, dass die DLL rufen. wenn Ihre Importe in einer Datei sind beispielsweise genannt AAA.x, c89 -Wc, DLL myapp.c AAA.x würde den Aufruf Code kompilieren, mit dem Bewusstsein, dass die Funktionen in AAA.x sind in irgendeiner Art von DLL aus.

Um Ihre Punkt über DLLs andere DLLs aufrufen, vergessen Sie nicht, dass eine DLL beide „dienen“ und „verbrauchen“ Funktionen ... durch die Seitenplattform für Funktionen in anderen DLLs einschließlich, können Sie eine DLL haben, zur Verfügung stellt einige Funktionen beim Aufruf andere DLLs zugreifen andere.

Die tatsächliche DLL selbst kann an mehreren Orten sein, abhängig von der Art Ihrer App. Wenn Sie UNIX-Dienstleistungen freundlich, es ist nur eine ausführbare Datei in LIBPATH. Es kann auch STEPLIB, LNKLST, LPA sein und so weiter.

Wenn Sie möchten, können Sie Ihre DLLs explizit zur Laufzeit mit dlopen () zugreifen, dlsym () und so weiter. Im Allgemeinen können Sie hiermit genau steuern, welche DLL Sie verwenden (manchmal praktisch, wenn der Benutzer eine selbst zur Verfügung stellen kann), und es gibt Ihnen, was zu Funktionszeiger beträgt, die innerhalb der DLL aufgelöst werden.

Es gibt einige andere grundlegende Dinge zu beachten bei der Verknüpfung, wie sichergestellt wird, dass Ihr Code einspringenden. Die meisten von ihnen sind in der IBM-Dokumentation geschrieben, und wenn Sie mit Dingen wie „c89“ (oder gleichwertig) bauen, die richtigen Optionen sind in der Regel Setup automatisch für Sie (in der Tat eine gute Vorstellung davon zu bekommen, was los ist, wiederum auf der ausführliche Ausgabe und sehen Sie alle Parameter für sich selbst).

Wenn Sie einen Querverweis von aufbauen müssen, was nennt das, was kann der UNIX-Service „nm“ Befehl gibt Ihnen diese Informationen. Wenn Sie detaillierte Link-edit Inserate erzeugen, werden alle Daten ist auch drin, wenn Sie Ihre DLLs zu bauen.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top