2010-04-23 10 views
6

Sto appena iniziando a imparare JNI. Ho seguito un semplice esempio e ho creato un'applicazione Java che chiama un metodo Hello World in una libreria nativa. Mi piacerebbe indirizzare Win32 e Linux x86.Come posso includere librerie native specifiche della piattaforma nel file .JAR usando Eclipse?

La mia libreria risiede in una DLL e posso chiamarla correttamente utilizzando LoadLibrary quando la DLL viene aggiunta alla radice del mio progetto Eclipse.
Tuttavia, non riesco a capire come ottenere Eclipse per esportare un JAR eseguibile che include la DLL e il file .SO per Linux.

Quindi la mia domanda è fondamentalmente; come andresti sulla creazione di un progetto in Eclipse e includerai diverse versioni della stessa libreria nativa?

Grazie,
Martin

+0

In ogni finestra di dialogo di Eclipse, sembra che io voglia indirizzare a un file JAR per la libreria nativa. Ho provato a comprimere le mie librerie in un barattolo ea fare riferimento a questo, ma senza sigaro. Che cosa dovrebbe contenere un file jar? –

risposta

4

Per i JAR eseguibili, è necessario eseguire l'estrazione nella directory temporanea (magari in un blocco {} statico) e quindi caricare la DLL da tale directory (utilizzando System.loadLibrary() nello stesso blocco). Per fare ciò, è necessario sottoclasse ClassLoader e sovrascrivi il metodo findLibrary() per consentire alle librerie di essere trovate in quella directory. È possibile eseguire qualsiasi logica necessaria per caricare le librerie della piattaforma specifiche. Per essere onesti, la denominazione per le librerie sulle diverse piattaforme dovrebbe essere simile in ogni caso - credo che tu ometti la parte "lib" durante il caricamento e l'estensione. Questo è il succo di ciò. Probabilmente è più facile usare One-JAR come l'altro poster menzionato :)

+2

Grazie - l'ho fatto funzionare includendo la libreria come risorsa ed estraendola in fase di runtime. Può quindi essere caricato con System.load(). Scelto questo come risposta corretta perché è più dettagliato - comunque verificherà One-Jar. –

3

Si potrebbe voler controllare il progetto One-JAR. Ti consente di impacchettare la tua applicazione e le sue dipendenze (comprese le librerie native) in un singolo file jar.

Problemi correlati