jna загрузить библиотеку - PullRequest
2 голосов
/ 25 июля 2011

У меня проблема с загрузкой DLL с помощью JNA.Хотя я могу отлаживать код в затмении, я получаю исключение при экспорте и запускаю его как файл jar:

java.lang.UnsatisfiedLinkError: невозможно загрузить библиотеку 'SiUSBXp'

Anyидеи, почему он не находит мою dll, когда я запускаю ее как jar-файл?

Спасибо !!!!

public interface SiUSBXp extends StdCallLibrary {
    byte SI_GetNumDevices(IntByReference numdevices);
    byte SI_GetProductString( int deviceNum, byte[] productString, int options );
    byte SI_Open(IntByReference numdevices);
}

static SiUSBXp INSTANCE;

public static void main(String[] args) {
    System.setProperty("jna.library.path","SiUSBXp.dll");
    HashMap<String, StdCallFunctionMapper> optionMap = new HashMap<String, StdCallFunctionMapper>();
    StdCallFunctionMapper myMapper = new StdCallFunctionMapper();
    optionMap.put(Library.OPTION_FUNCTION_MAPPER, myMapper);
    INSTANCE = (SiUSBXp) Native.loadLibrary("SiUSBXp", SiUSBXp.class, optionMap);
}

------------------ РЕДАКТИРОВАТЬ ----------------------

DLL находится в той же папке, что и JAR

------------------ EDIT 2 ---------------------

Я только что попытался запустить его в Windows XP, и он работает .. но не в Windows 7 (64-разрядная версия)

------------------ РЕДАКТИРОВАТЬ 3 --------------------- Я решил проблему ... Это было из-за установленных версий Java ... Я удалил их все, изатем только установил версию Java для x86 ... после этого он работал отлично

Ответы [ 2 ]

4 голосов
/ 25 июля 2011

Поместите DLL в «Текущую папку» или системную переменную PATH или используйте -Djna.library.path=(path to the dll) в качестве коммутатора VM вместо жесткого кодирования.

0 голосов
/ 25 июля 2011

У меня были странные проблемы с jna 3.3.0, не находящим библиотеки, попробуйте jna 3.2.7.Кроме того, кроме jna.library.path, это также может помочь установить java.library.path.И я не уверен, стоит ли указывать имя библиотеки в пути, а не в папке, в которой она находится.

...