Другая проблема с JNI UnsatisfiedLinkError DLL - PullRequest
1 голос
/ 01 августа 2011

Я прочитал много постов по этому поводу, но ни один из них не посвящен моей проблеме.

У меня есть очень маленькая DLL, которая позволяет процессу Java отправлять сообщения Windows. Просто звонит

    FindWindowEx(...)
    SendMessage(...)

Я скомпилировал это с VS2005 и связал с / MT, и все в порядке, но если я пытаюсь сделать мою DLL зависимой от MSVCRT и связать с / MD, то я получаю ошибку неудовлетворенной связи.

java.lang.UnsatisfiedLinkError: MyDll.dll: не удается найти зависимые библиотеки

В соответствии с зависимости.exe у него есть две отсутствующие библиотеки DLL, GPSVC.DLL и IESHIMS.DLL. Первый существует в c: \ windows \ system32, а второй - в пути winsxs. Существуют ЗАГРУЗКИ других библиотек DLL, загруженных из c: \ windows \ system32, и GPSVC.DLL является странным в том смысле, что даже если на моем компьютере win7x64 работает администратор, я не могу запустить, это зависит от того, что он не найден ...

В любом случае, я попытался принудительно загрузить обе эти библиотеки DLL в Java (упрощенно - я не контролирую java.library.path)

    Field field = ClassLoader.class.getDeclaredField("usr_paths");
    field.setAccessible(true);
    String[] paths = (String[]) field.get(null);
    String[] tmp = new String[paths.length + 2];
    System.arraycopy(paths, 0, tmp, 0, paths.length);
    tmp[paths.length] = "c:/windows/system32";
    tmp[paths.length + 1] = "c:/Windows/winsxs/amd64_microsoft-windows-ie-ieshims_31bf3856ad364e35_8.0.7601.17514_none_c06d7c9c27da8591";
    field.set(null, tmp);

но это не имело значения. Я могу отступить, чтобы сделать его статически связанным, но я бы не стал.

Есть идеи, что я могу попробовать дальше? Antony

1 Ответ

0 голосов
/ 01 августа 2011

Ну, я использую Visual Studio 2010, но он может работать и в 2005 году.

Вы можете попробовать настроить компилятор VC, используя vcvarsall.bat, который вы можете найти в ProgramFiles в / MicrosoftVisualStudio20xx / VC.

Вам нужно только запустить vsvarsall.bat в командной строке с одним из следующих параметров: x86 или ia64 или x86_amd64 или x86_ia64. Я не знаю, поможет ли это, но это может быть одной из проблем, из-за которой компилятор VC не настроен на работу с 64-битной машиной.

Когда я работаю с JNI, я использую командную строку для компиляции кода, и мне пришлось настраивать компилятор на 64-битной машине.

Или вы можете попытаться скомпилировать его через командную строку. Вот мой любимый урок http://www.ibm.com/developerworks/java/tutorials/j-jni/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...