Я скомпилировал dll JNI, который я хотел бы загрузить в свое Java-приложение, используя System.loadLibrary
. Это прекрасно работает на Windows XP с DLL, скомпилированной с использованием MSVC ++ 2008 Express.
Однако в Windows 7, где я скомпилировал dll с использованием MSVC ++ 2010 Express (те же опции, та же архитектура процессора, та же версия Java, просто другая ОС и компилятор), приложение зависало при вызове loadLibrary
. Нет сообщений об ошибках, нет реакции вообще. Когда я пытаюсь jstack
на замороженном процессе, он также зависает (без вывода, без завершения). Запуск приложения от имени администратора не решает эту проблему.
DLL и все ее зависимости находятся в java.library.path
. Фактически, когда я удалял их, Java-приложение сообщало мне, что они отсутствуют, поэтому dll должна быть правильно инициализирована, а что-то еще не получилось. Однако отладка доказывает, что на самом деле loadLibrary
зависает, а потом ничего не происходит.
Кто-нибудь может сказать мне, что здесь происходит?
UPDATE
Как указано в моем комментарии ниже, эта проблема, похоже, идет глубже. Использование простой программы на C для загрузки одной из зависимостей указанной DLL уже приводит к зависанию, поэтому это должно быть какой-то проблемой с Windows API и тем, как MSVC ++ связывал DLL (эта зависимость также была связана с MSVC ++ 2010 Express) .