EGL-Programme können C-Funktionen über Bibliotheksabschnitte mit dem Stereotyp nativeLibrary aufrufen.
Ihr C-Code empfängt Werte aus EGL mit externen Abruffunktionen und gibt Werte mit externen Rückgabefunktionen an EGL zurück.
cc -c -Iincl_dir file1.c file2.c
ld -G -b32 -bexpall -bnoentry
-brtl file1.o file2.o -Lstack_lib_dir
-lstack -o lib1_name -lc
cc -c -Iincl_dir file1.c file2.c
gcc -shared file1.o file2.o -Lstack_lib_dir
-lstack -o lib1_name
Windows (der Befehl link muss in einer einzigen Zeile eingegeben werden):
cl /c -Iincl_dir file1.c file2.c
link /DLL file1.obj file2.obj
/LIBPATH:stack_lib_dir
/DEFAULTLIB:stack.lib /OUT:lib1_name
Die Funktionstabelle ist eine C-Quellendatei, in der die Namen aller C-Funktionen enthalten sind, die aus dem EGL-Programm aufgerufen werden sollen. Im folgenden Beispiel für die Funktionstabelle sind c_fun1 und c_fun2 Namen von C-Funktionen. Alle im Code angegebenen Funktionen müssen aus der gemeinsam genutzten C-Bibliothek, die in einem vorherigen Schritt erstellt wurde, exportiert worden sein.
#include <stdio.h>
struct func_table {
char *fun_name;
int (*fptr)(int);
};
extern int c_fun1(int);
extern int c_fun2(int);
/* Similar prototypes for other functions */
struct func_table ftab[] =
{
"c_fun1", c_fun1,
"c_fun2", c_fun2,
/* Similarly for other functions */
"", NULL
};
Erstellen Sie anhand des obigen Beispiels eine Funktionstabelle und füllen Sie die Funktionstabelle mit den entsprechenden C-Funktionen. Geben Sie das Ende der Funktionstabelle mit "", NULL an.
Die Anwendungsobjektdatei ist die Schnittstelle zwischen dem EGL-Code und dem C-Code.
Kompilieren Sie die neue gemeinsam genutzte Bibliothek anhand des folgenden Beispiels. Hierbei ist ftable.c der Name der Funktionstabelle und mylib der Name der gemeinsam genutzten C-Bibiliothek, die in Schritt 2 erstellt wurde. lib_dir ist die Verzeichnisposition für mylib. Geben Sie den Wert für lib2_name mit der Eigenschaft dllName oder der Java™-Laufzeiteigenschaft vgj.defaultI4GLNativeLibrary an.
AIX (der Befehl ld muss in einer einzigen Zeile eingegeben werden):
cc -c ftable.c
ld -G -b32 -bexpall -bnoentry
-brtl ftable.o application.o
-Lstack_lib_dir -lstack -Llib_dir
-lmylib -o lib2_name -lc
Linux (der Befehl gcc muss in einer einzigen Zeile eingegeben werden):
cc -c ftable.c
gcc -shared ftable.o application.o
-Lstack_lib_dir -lstack -Llib_dir
-lmylib -o lib2_name
Windows (der Befehl link muss in einer einzigen Zeile eingegeben werden):
cl /c ftable.c
link /DLL ftable.obj application.obj
/LIBPATH:stack_lib_dir
/DEFAULTLIB:stack.lib
/LIBPATH:lib_dir
/DEFAULTLIB:mylib.lib /OUT:lib2_name
Verknüpfen Sie die drei Bibliotheken miteinander.
Sobald die gemeinsam genutzte C-Bibliothek, die Funktionstabelle und die Stackbibliothek miteinander verknüpft wurden, können Sie die C-Funktionen aus dem EGL-Code aufrufen. Informationen zum Aufrufen einer C-Funktion in EGL finden Sie unter C-Funktion aus einem EGL-Programm aufrufen.