LoadLibrary зависает - PullRequest
       17

LoadLibrary зависает

3 голосов
/ 10 марта 2011

Я скомпилировал 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) .

1 Ответ

4 голосов
/ 11 марта 2011

Ваша DLL почти наверняка вызывает что-то, что пытается получить блокировку загрузчика изнутри DLLMain().

То, что вы описываете, называется тупиком, и эти симптомы идеально подходят для этой конкретной проблемы.

...