Wie verwende ich eine C-Bibliothek wie PJSIP auf Java?

8

Gibt es eine Möglichkeit, Methodenaufrufe aus einer in C kompilierten Bibliothek wie der PJSIP-Bibliothek zu verwenden und aufzurufen?

Ich möchte Aufrufe von der pjsip-Bibliothek, die ich kompiliert habe, verwenden und aufrufen, aber das offensichtliche Problem ist, dass pjsip eine C-Bibliothek und keine Java-Bibliothek ist, also eine JAR-Datei.

Möglich? Vielleicht JNI?

Danke

edit: versucht mit Swig, um die Aufgabe zur Hand zu tun, aber alles was es tut, ist eine leere Klassendatei zu erstellen.

Hier ist der Befehl, den ich benutze, um swig auszuführen:

%Vor%

Ausgabe von swig Befehl

%Vor%

pjsua java class erstellt es für mich:

%Vor%

Die pjsua jni-Datei, die es für mich erstellt

%Vor%

Das jni_wrapper.c erzeugt es für mich unten:

%Vor%

Ich habe die pjsua.h-Datei im selben Verzeichnis wie meine .i-Datei, daher ist es einfacher, beides zu finden, während der swig-Befehl ausgeführt wird, und einen Ratschlag?

Ich möchte im Grunde genommen swig oder jedes andere Tool, um eine pjsua oder pjsip Java-Klasse mit all ihren Implementierungen oder Schnittstellenmethoden zu erstellen, die ich verwenden kann, um die Bibliothek tatsächlich zu benutzen.

Wie ein Schmerz, dass es keine Java-Version dieses Sip-Stacks gibt

    
jonney 13.05.2013, 16:16
quelle

3 Antworten

3

Versuchen Sie JNA mit JNAerator: Ссылка . Ich habe es erfolgreich in meinen eigenen Projekten verwendet.

    
Jukka 25.05.2013, 18:29
quelle
3

Ich habe den einfachsten Weg gefunden, dies zu tun, wenn Sie die Header-Dateien haben: SWIG . Sie erstellen eine yourmodule.i -Datei für Ihr Modul (die Bibliothek) und schließen alle Klassen ein, auf die Sie über JNI zugreifen möchten. ZB:

%Vor%

Sie können auch Typemaps von C bis zu Java-Strukturen bereitstellen.

Wenn Sie eine bestimmte Methode ignorieren möchten:

%Vor%

Sie können swig ausführen, um einige Java-Klassen wie folgt zu generieren:

%Vor%

Weitere Informationen und Beispiele finden Sie in der Java-Dokumentation .

    
Martin Foot 13.05.2013 17:10
quelle
2

Ich würde empfehlen, Javacpp zu verwenden. Ich habe es vorher benutzt und es hat ziemlich gut funktioniert, das, was Sie hier brauchen, ist einfach eine Brücke, SWIG ist nicht sehr freundlich, und ich verschwendete viel Zeit damit.

Wie für die angeforderte spezifische Bibliothek versuchen Sie diese pjsip-jni , ihre Wrapper für die Pjsip in Java geschrieben und jni.

    
engma 27.05.2013 12:41
quelle

Tags und Links