Como posso include bibliotecas nativas específicas da plataforma no arquivo .JAR usando o Eclipse?

Eu estou apenas começando a aprender JNI. Eu tenho seguido um exemplo simples e criei um aplicativo Java que chama um método Hello World em uma biblioteca nativa. Gostaria de segmentar o Win32 e o Linux x86.

Minha biblioteca reside em uma DLL, e posso chamá-lo muito bem usando LoadLibrary quando a DLL é adicionada à raiz do meu projeto Eclipse.
No entanto, não consigo descobrir como obter o Eclipse para exportar um JAR executável que inclua a DLL e o arquivo .SO para o Linux.

Então minha pergunta é basicamente; Como você poderia criar um projeto no Eclipse e include várias versões da mesma biblioteca nativa?

Obrigado,
Martin

Para JARs executáveis, o que você precisa fazer é extrair para o diretório temporário (talvez em um bloco {} estático) e, em seguida, carregar a DLL desse diretório (usando System.loadLibrary () no mesmo bloco). Para fazer isso, você precisa subclassificar ClassLoader e replace o método findLibrary () para permitir que as bibliotecas sejam encontradas nesse diretório. Você pode fazer qualquer lógica necessária aqui para carregar as bibliotecas específicas da plataforma. Para ser honesto, a nomenclatura para as bibliotecas nas diferentes plataformas deve ser similar de qualquer maneira – eu acredito que você omite a parte ‘lib’ ao carregar, e a extensão. Essa é a essência disso. Provavelmente mais fácil usar o One-JAR como o outro pôster mencionado 🙂

Você pode querer verificar o projeto One-JAR . Ele permite empacotar seu aplicativo e suas dependencies (incluindo bibliotecas nativas) em um único arquivo jar.

    Intereting Posts