2017-02-04 2 views
0

Я использую JNI как средство для подключения моего кода Java и кода C.JNI Невозможно загрузить собственную библиотеку

код компилируется нормально и открывает приложение GUI экран, а затем закрывает его которым означает, отмечая неправильно с той частью кода Wich чисто C.

Однако, когда я запускаю программу консольный вывод сразу говорит мне:

Error occurred during initialization of VM 
Unable to load native library: Can't find dependent libraries 

и возвращает 1 как код ошибки. Я получил jvm.dll в той же папке exe, и я думаю, что JDK PATH правильно настроен. Я понятия не имею, в чем проблема.

Я искал ошибку, но не смог ее исправить.

+0

Просьба предоставить нам дополнительную информацию о вашей среде сборки. MinGW? Visual Studio? – samgak

+0

@samgak Использование MinGW с кодом: blocks IDE – Primemaster

ответ

1

Эта ошибка означает, что виртуальная машина Java находит и пытается загрузить вашу .dll, но дополнительные DLL-файлы, от которых зависит ваш .dll, не могут быть найдены. Один из вариантов - убедиться, что эти дополнительные зависимости находятся в PATH, но это может быть сложно, потому что это зависит от настройки переменных среды во время установки, установки их во время выполнения или размещения дополнительных DLL в одну и ту же папку.

Другой способ исправить это использовать флаг в -static компоновщика при компоновке вашей .dll (обратите внимание, что это не взаимоисключающие с -shared вариант, который говорит компоновщик пакет ваш код в .dll). Это означает, что дополнительные зависимости будут статически связаны с вашей .dll, вместо того, чтобы быть расположенными во время выполнения.

+0

Кажется, что добавление флага '-static' работает, но ломает мои другие библиотеки. Получение неопределенных ссылок на некоторые функции «SDL2». Я попытался использовать «зависимый ходок», но он сбрасывает среднее профилирование. – Primemaster

+0

Проверьте этот вопрос (и аналогичные): http://stackoverflow.com/questions/20303032/unable-to-successfully-link-to-sdl2-libs-i-get-undefined-reference-for-all-sdl Также добавьте строку аргумента linker к вашему вопросу, если это не сработает – samgak