JNA: родные библиотечные зависимости и извлечение JAR

Я получу доступ к MSP430.dll (см. Здесь) через JNA. Но эта библиотека имеет зависимость от другой нативной библиотеки, которая поставляется в комплекте с MSP430.dll. Эта зависимая нативная библиотека называется HIL.dll. С использованием jna.library.path все работает отлично. Теперь я собираю нативные библиотеки в свой собственный пакет .jar. Тогда я бы использовал автоматическую загрузку нативной библиотеки из jar фреймворка JNA. Но это создает проблемы с нативными библиотеками, которые имеют зависимости. Если я упаковываю MSP430.dll и HIL.dll в свой пакет .jar, я получаю следующую ошибку: «JNA java.lang.UnsatisfiedLinkError и указанный модуль не найден». Это означает, что не удалось разрешить зависимости MSP430.dll в HIL.dll. В отладочных выводах JNA, которые я вижу, только файл MSP430.dll будет извлекаться из пакета .jar. В этом контексте ошибка понятна. На следующем этапе я загружаю файл HIL.dll в явном виде и вижу извлечение файла HIL.dll из файла MSP430.dll. Но я все еще получаю ошибку модуля от JNA.

Я посмотрел на код JNA метода извлечения. Я вижу, что JNA извлекает нативные библиотеки в системный временный каталог и создает собственный временный каталог в них. Но теперь я думаю, что проблема в том, что JNA создает временные файлы для нативных библиотек с префиксом «jna» и уникальным сгенерированным числовым значением. Вот вывод JNA:

Found library 'HIL.dll' at C:\Users\RD3\AppData\Local\Temp\jna-80961\jna1305152974718331988.dll

Я думаю, что MSP430.dll нужен HIL.dll без переименования для его поиска. У меня есть testet с прямой загрузкой HIL.dll с последующим первым вызовом в приложении

System.loadLibrary(C:\\absolutepath\\HIL.dll);

Затем загружает только MSP430.dll через JNA из пакета .jar, это работает без проблем. После этого я переименую HIL.dll в lol.dll и использую этот вызов:

System.loadLibrary(C:\\absolutepath\\lol.dll);

затем я снова получаю ошибку модуля от JNA. MSP430.dll не удалось разрешить переименованный HIL.dll.

В любом случае возможно ли упаковать нативную библиотеку с зависимостями в пакет .jar и загрузить с помощью JNA?

Вот отладочный вывод JNA с явной загрузкой HIL.dll через JNA:

C:\Users\RD3\Desktop>call "C:\Program Files (x86)\Java\jre1.8.0_25\bin\java.exe"
 -Djna.debug_load=true -jar C:\Data\Workspace\NetBeans\MspApiTest\target\MspApiTest-1.0.0-SNAPSHOT-jar-with-dependencies.jar
Looking in classpath from sun.misc.Launcher$AppClassLoader@1f96302 for /com/sun/jna/win32-x86/jnidispatch.dll
Found library resource at jar:file:/C:/Data/mstandfuss/Workspace/NetBeans/MspApiTest/target/MspApiTest-1.0.0-SNAPSHOT-jar-with-dependencies.jar!/com/sun/jna/win32-x86/jnidispatch.dll
Looking for library 'HIL.dll'
Adding paths from jna.library.path: null
Trying HIL.dll
Adding system paths: []
Trying HIL.dll
Looking for lib- prefix
Trying libHIL.dll
Looking in classpath from sun.misc.Launcher$AppClassLoader@1f96302 for HIL.dll
Found library resource at jar:file:/C:/Data/mstandfuss/Workspace/NetBeans/MspApiTest/target/MspApiTest-1.0.0-SNAPSHOT-jar-with-dependencies.jar!/win32-x86/HIL.dll
Found library 'HIL.dll' at C:\Users\RD3\AppData\Local\Temp\jna-80961\jna1305152974718331988.dll
Looking for library 'MSP430.dll'
Adding paths from jna.library.path: null
Trying MSP430.dll
Adding system paths: []
Trying MSP430.dll
Looking for lib- prefix
Trying libMSP430.dll
Looking in classpath from sun.misc.Launcher$AppClassLoader@1f96302 for MSP430.dll
Found library resource at jar:file:/C:/Data/mstandfuss/Workspace/NetBeans/MspApi
Test/target/MspApiTest-1.0.0-SNAPSHOT-jar-with-dependencies.jar!/win32-x86/MSP430.dll
Exception in thread "main" java.lang.UnsatisfiedLinkError: Das angegebene Modul wurde nicht gefunden.

        at com.sun.jna.Native.open(Native Method)
        at com.sun.jna.Native.open(Native.java:1759)
        at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:260)
        at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
        at com.sun.jna.Library$Handler.<init>(Library.java:147)
        at com.sun.jna.Native.loadLibrary(Native.java:412)
        at com.sun.jna.Native.loadLibrary(Native.java:391)
        at de.sitec.jmspflash.Msp430Native.<clinit>(Msp430Native.java:22)
        at de.sitec.jmspflash.Msp430Impl.init(Msp430Impl.java:50)
        at de.sitec.jmspflash.Msp430Impl.createMsp430Impl(Msp430Impl.java:36)
        at de.sitec.mspapitest.App.main(App.java:34)

C:\Users\RD3\Desktop>

С наилучшими пожеланиями

Ответы на вопрос(1)

Ваш ответ на вопрос