Comment puis-je inclure des bibliothèques natives spécifiques à la plate-forme dans le fichier .JAR à l’aide d’Eclipse?

Je commence juste à apprendre JNI. J’ai suivi un exemple simple et j’ai créé une application Java qui appelle une méthode Hello World dans une bibliothèque native. Je voudrais cibler Win32 et Linux x86.

Ma bibliothèque réside dans une DLL et je peux l’appeler simplement avec LoadLibrary lorsque la DLL est ajoutée à la racine de mon projet Eclipse.
Cependant, je ne peux pas comprendre comment faire pour que Eclipse exporte un fichier JAR exécutable qui inclut la DLL et le fichier .SO pour Linux.

Donc, ma question est essentiellement la suivante: comment feriez-vous pour créer un projet dans Eclipse et inclure plusieurs versions de la même bibliothèque native?

Je vous remercie,
Martin

Pour les fichiers JAR exécutables, vous devez extraire dans le répertoire temporaire (peut-être dans un bloc statique {}), puis charger la DLL à partir de ce répertoire (en utilisant System.loadLibrary () dans le même bloc). Pour ce faire, vous devez sous-classer ClassLoader et remplacer la méthode findLibrary () pour permettre aux bibliothèques de se trouver dans ce répertoire. Vous pouvez faire la logique nécessaire pour charger les bibliothèques de plates-formes spécifiques. Pour être honnête, le nom des bibliothèques sur les différentes plates-formes devrait être similaire de toute façon – je pense que vous omettez la partie «lib» lors du chargement et l’extension. C’est l’essentiel de cela. Probablement plus facile d’utiliser One-JAR comme l’a mentionné l’autre affiche 🙂

Vous pourriez vouloir vérifier le projet One-JAR . Il vous permet de conditionner votre application et ses dépendances (y compris les bibliothèques natives) dans un seul fichier jar.