2010-04-23 11 views
6

Właśnie zaczynam uczyć się JNI. Podążałem prostym przykładem i stworzyłem aplikację Java, która wywołuje metodę Hello World w rodzimej bibliotece. Chciałbym ukierunkować system Win32 i Linux x86.Jak mogę uwzględnić biblioteki macierzyste specyficzne dla platformy w pliku .JAR przy użyciu środowiska Eclipse?

Moja biblioteka znajduje się w bibliotece DLL i mogę ją nazwać dobrze za pomocą LoadLibrary, gdy biblioteka DLL zostanie dodana do katalogu głównego mojego projektu Eclipse.
Nie mogę jednak dowiedzieć się, jak zmusić Eclipse do eksportu działającego pliku JAR zawierającego bibliotekę DLL i plik .SO dla systemu Linux.

Moje pytanie jest w zasadzie; w jaki sposób chciałbyś stworzyć projekt w Eclipse i dołączyć kilka wersji tej samej natywnej biblioteki?

Dziękuję
Martin

+0

W każdym oknie Eclipse wydaje mi się, że chcę wskazać plik JAR dla biblioteki natywnej. Próbowałem kompresować moje biblioteki do słoika i odnoszę się do tego, ale bez cygara. Co takiego powinien zawierać plik JAR? –

Odpowiedz

4

Dla działających JARów, należy wyodrębnić do katalogu tymczasowego (może w statycznym bloku {}), a następnie wczytać bibliotekę DLL z tego katalogu (używając System.loadLibrary() w tym samym bloku). Aby to zrobić, musisz podklasować ClassLoader i zastąpić metodę findLibrary(), aby umożliwić znalezienie bibliotek w tym katalogu. Możesz zrobić tutaj dowolną logikę, aby załadować poszczególne biblioteki platform. Szczerze mówiąc, nazewnictwo bibliotek na różnych platformach powinno być podobne - uważam, że pomijasz część "lib" podczas ładowania i rozszerzenie. To jest sedno tego. Prawdopodobnie łatwiej użyć One-JAR, jak wspomniany jest inny plakat :)

+2

Dziękuję - Zrobiłem to, włączając bibliotekę jako zasób i wyodrębniając ją w czasie wykonywania. Następnie można go załadować za pomocą System.load(). Wybrało to jako poprawną odpowiedź, ponieważ jest bardziej szczegółowa - jednak sprawdzi One-Jar. –

3

Możesz chcieć sprawdzić projekt One-JAR. Pozwala spakować aplikację i jej zależności (w tym biblioteki natywne) do pojedynczego pliku jar.

Powiązane problemy