Ява.ленг.UnsatisfiedLinkError: не удается загрузить библиотеку (с помощью Visual Studio 2015 build)

Я пытаюсь использовать:

  1. 32-разрядная библиотека DLL (построенная с помощью Visual Studio 2015) на 32-разрядном JVM, работающем на 64-разрядной машине Windows 7

  2. 64-разрядная библиотека DLL (построенная с помощью Visual Studio 2015) на 64-разрядном JVM-приложении, работающем на 64-разрядной машине Windows 7

DLL имеет несколько предоставленных зависимостей, но я настроил jna.библиотека.путь ‘ к папке, содержащей все необходимые зависимости, чтобы jna могла их найти. Я также добавил папку, содержащую DLL и его зависимости к ‘ java.библиотека.path’, чтобы убедиться, что они найдены.

В обоих случаях, к сожалению, я получаю

Ява.ленг.UnsatisfiedLinkError: не удается загрузить библиотеку.

Некоторые другие моменты для рассмотрения:

  • Если я запускаю приложение из каталога, содержащего библиотеки, оно запускается без каких-либо проблем.
    Указывает ли это на проблему с путем поиска DLL для загрузки?

  • Ранее я создавал библиотеку с помощью Visual Studio 2010, и мне удалось загрузить библиотеки без проблем.
    Может ли это быть проблема со сборкой DLL?

Есть какие-то идеи по поводу того, что могло бы быть проблемой?

Я включил jna.debug_load ‘ и ‘ jna.debug_load.jna ‘ и журнал показывает, что правильный путь пробован, но загрузка все еще не выполняется (я проверил и перепроверил, что в обоих сценариях правильный lib доступен в C:pathtomylib [32/64]xxx.dll). Следующий журнал предназначен для загрузки 32 bit DLL, но точный же результат происходит с 64 bit DLL.

...snip...
Trying (via loadLibrary) jnidispatch
Looking in classpath from ...[...] for x86/jnidispatch.dll
Found library resource at bundleresource://449.fwk22856250/com/sun/jna/win32-x86/jnidispatch.dll
Trying C:...snip...AppDataLocalTempjna--892366855jna1523529206075569309.dll
Found jnidispatch at C:...snip...AppDataLocalTempjna--892366855jna1523529206075569309.dll
Looking for library 'xxx'
Adding paths from jna.library.path: C:/path/to/my/lib32
Trying C:pathtomylib32xxx.dll
Adding system paths: []
Trying C:pathtomylib32xxx.dll
Looking for lib- prefix
Trying libxxx.dll
Looking in classpath from ...[...]
...
java.lang.UnsatisfiedLinkError: Unable to load library 'xxx': Native library (win32-x86/xxx.dll) not found in resource path...
...snip...

1 ответ

  1. java.library.path является производным от PATHon VM startup. java.library.pathне влияет на поведение системы. Он используется только для направления, где JVM делает свою первоначальную попытку загрузки собственных библиотек.

    Сама система использует PATHдля информирования своего поиска не только начальные нагрузки, но и все зависимости. Единственный элемент управления JNA над загрузкой собственных библиотек — это включение каталога целевой библиотеки в путь поиска зависимостей.