![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Temdegon |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
У меня есть моя сишная либа MyLib.dll, из которой с помощью JNI вызывается нужная мне native-функция.
подключаю ее в статическом блоке:
сам библиотека лежит в той же папке. Код компилится. Если запустить из консоли, то все гуд: прила стартует, нативные функции вызываются и работает. Казалось бы, чего еще можно желать? Но в NetBeans почему-то это не прокатывает! при запуске получаю:
хотя dll-ка лежит во всех местах, где только можно: и в src, и build\classes. Кроме того, если проект скомпилить в Jar, а потом запустить, то получаю тот же Exception, хотя если залезть в jar, то библиотека там есть, и лежит вроди как на своем месте (там же, где и class-файлы). Обьясните пожалста, как решить эту проблему? Как правильно подключать библиотеки и куда их принято ложить? Можно конечно забить на это, и всю жизнь компилить из консоли, но ведь хочется удобства, да и jar в использовании намного удобнее чем куча class-ов ![]() Погуглил немного на эту тему, но конкретного решения проблемы не нашел. На сайте NetBeans нашел руководсво по jni, там написано:
попробовал (естесно поменяв путь на свой) - результат тот же. Да и как-то это странно - подключать библиотеку относительно PROJECTS_ROOT. |
||||||
|
|||||||
Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Вроди как методом научного тыка решил проблему: что бы все запускалось из NetBeans, dll-ку нужно ложитьв в корень проекта. Если нужно запустить jar, то dll нужно положить в тот же каталог.
Я так понял, что подключить dll, когда она лежит в jar-e никак не получится. Может можно как-то иначе? Может кому пригодится: Во время разборок с jni наткнулся на такие грабли: Библиотеку компилил взяв за основу какой-то простейший пример. Естественно, класс и библиотека назывались HelloNative. Разобравшись что и как, реализовал нужные функции и скомпилил библиотеку. Из класса HelloNative функция вызывается, все работает, я доволен как слон. Потом вернулся к тому прокетку, для которого и писал эту dll. Поленился что-то переименовывать и перекомпилировать библиотеку, так и подключил ее "как есть". А фиг - ничего не работает! Библиотека загружается, но при попытке вызова native-функции получаю java.lang.UnsatisfiedLinkError. Очень долго возился и не мог понять, почему не вызывается функция. После долгих мучений я понял что в сишном файле заголовок функции JNIEXPORT jstring JNICALL Java_HelloNative_greeting(JNIEnv * jenv, jclass jobj, jstring message) означает не то, что эта функция находится в библиотеке HelloNative, а то что она должна вызываться из java-класса HelloNative! |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
это значит что dll лежит в текущей (рабочей) директории, которой по умолчанию в NetBeans является корень проекта. Эту директорию можно настроить через свойства проекта, настройки запуска. Запуская jar самостоятельно, очевидно, что рабочей директорией у вас является папка где лежит jar.
верно, никак не получится. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |