2010-04-23 9 views
6

Ich fange gerade an, JNI zu lernen. Ich habe ein einfaches Beispiel verfolgt und eine Java-App erstellt, die eine Hello World-Methode in einer nativen Bibliothek aufruft. Ich möchte Win32 und Linux x86 zielen.Wie kann ich plattformspezifische native Bibliotheken in die JAR-Datei mit Eclipse einbeziehen?

Meine Bibliothek befindet sich in einer DLL, und ich kann es einfach mit LoadLibrary aufrufen, wenn die DLL zum Stamm meines Eclipse-Projekts hinzugefügt wird.
Allerdings kann ich nicht herausfinden, wie Eclipse eine ausführbare JAR, die die DLL und die .SO-Datei für Linux enthält, zu exportieren.

Also meine Frage ist im Grunde; Wie würden Sie ein Projekt in Eclipse erstellen und mehrere Versionen derselben nativen Bibliothek hinzufügen?

Danke,
Martin

+0

In jedem Eclipse-Dialog scheint es, dass ich möchte, dass ich auf eine JAR-Datei für die native Bibliothek zeigen. Ich habe versucht, meine Bibliotheken in ein Glas zu packen und darauf zu verweisen, aber keine Zigarre. Was soll eine solche JAR-Datei enthalten? –

Antwort

4

Für ausführbare JARs müssen Sie in das temporäre Verzeichnis (möglicherweise in einem statischen {} Block) extrahieren und dann die DLL aus diesem Verzeichnis laden (mit System.loadLibrary() im selben Block). Dazu müssen Sie ClassLoader von der Klasse ableiten und die Methode findLibrary() überschreiben, damit Bibliotheken in diesem Verzeichnis gefunden werden können. Sie können die Logik verwenden, die Sie zum Laden der jeweiligen Plattformbibliotheken benötigen. Um ehrlich zu sein, sollte die Benennung für die Bibliotheken auf den verschiedenen Plattformen sowieso ähnlich sein - ich glaube, dass Sie den "lib" -Teil beim Laden und die Erweiterung weglassen. Das ist das Wesentliche davon. Wahrscheinlich einfacher zu verwenden One-JAR wie das andere Plakat erwähnt :)

+2

Danke - ich habe es geschafft, indem ich die Bibliothek als Ressource einfüge und sie zur Laufzeit extrahiere. Es kann dann mit System.load() geladen werden. Wählte das als die richtige Antwort, weil es detaillierter ist - wird aber One-Jar überprüfen. –

3

Sie könnten das One-JAR Projekt zu sehen. Sie können Ihre Anwendung und ihre Abhängigkeiten (einschließlich nativer Bibliotheken) in einer einzigen JAR-Datei packen.

Verwandte Themen