Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10

JNI fatal error

21.09.2016, 12:45. Показов 2351. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Возникла проблема при работе с созданной мной dll через нативный интерфейс.
В созданной мною dll реализована функция, принимающая на вход несколько целых и вещественных массивов.
Библиотека без проблем компилируется и загружается, но при вызове моей функции из приложения java всё рушится:

# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x64fd17a7, pid=8320, tid=8692
#
# JRE version: Java(TM) SE Runtime Environment (8.0_25-b18) (build 1.8.0_25-b18)
# Java VM: Java HotSpot(TM) Client VM (25.25-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# V [jvm.dll+0x17a7]

Начал разбираться в чём дело. Сначала убрал весь код из функции и заново скомпилировал библиотеку - всё норм, работает.
Затем поочередно стал добавлять выражения. Начало выглядит так:

jint *ptElems, *iaElems, *jaElems, *permElems, *iparmElems;
jfloat *aElems, *bElems, *xElems;

ptElems = (*env)->GetIntArrayElements (env, pt, NULL);
iaElems = (*env)->GetIntArrayElements (env, ia, NULL);
jaElems = (*env)->GetIntArrayElements (env, ja, NULL);
permElems = (*env)->GetIntArrayElements (env, perm, NULL);
aElems = (*env)->GetFloatArrayElements (env, a, NULL);
bElems = (*env)->GetFloatArrayElements (env, b, NULL);
xElems = (*env)->GetFloatArrayElements (env, x, NULL);

То есть просто выделяю память под массивы средствами JNI. Оказалось, что если оставить только одно или два выражения, например так:

jint *ptElems, *iaElems, *jaElems, *permElems, *iparmElems;
jfloat *aElems, *bElems, *xElems;

ptElems = (*env)->GetIntArrayElements (env, pt, NULL);
iaElems = (*env)->GetIntArrayElements (env, ia, NULL);

Всё по прежнему работает. Но когда я выделяю память под 3 и более массивов, функция перестаёт работать и её вызов приводит к ошибке. Также я пытался внутрь функции запихать вызов printf для файла C или cout<< для файла С++ чтобы вывести какое нибудь сообщение, но эти функции тоже приводят к ошибке.

В чём может быть дело?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.09.2016, 12:45
Ответы с готовыми решениями:

Fatal error. IntelliJ IDEA
Добрый день! тут такая проблема что я не могу скомпилировать по причине не понятной ошибки. при попытке компиляции, пишет java:...

[Linker Fatal Error] Fatal: Could not open ~CBuilder6\Projects\Project1.exe (error code 5)
Инсталировал с++ builder 6. Запустил програму и попробывал компилировать пустую форму, чтобы протестировать програму. Она должна была мне...

[Linker Fatal Error] Fatal: Unable to open file 'IBCONST.OBJ'
Пожалуйста помогите найти ошибку в программе. Перерыл, но сам нестыковку найти не смог. Fatal: Unable to open file 'IBCONST.OBJ'

5
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
21.09.2016, 21:55
По этому кусочку сложно что-то понять. Насколько я вижу падает, уже при возврате в java код, а не сам C код. Так что проблема вряд ли в этих 5-ти строчках
0
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10
22.09.2016, 09:09  [ТС]
С помощью assert(0) убедился, что не происходит выход из очередного метода GetIntArrayElements. Понятно что в приведённом С коде просто негде ошибиться
Может проблема быть с неправильными параметрами при компиляции или с различной разрядностью:
у меня процесор 64 бит, java и соответственно приложение 32 бит, подключаемая библиотека 32 бит?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
22.09.2016, 15:59
Java не смогла бы загрузить dll-ку не своей разрядности. Проблема в чём-то ещё. Без исходников/скриншотов не понять
0
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10
23.09.2016, 06:39  [ТС]
Какие нужны исходники?
0
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10
24.09.2016, 14:57  [ТС]
Лучший ответ Сообщение было отмечено turbanoff как решение

Решение

Всё вопрос решился!
Собрал в Visual Studio и всё работает.
До этого собирал с помощью Cygwin (компилятор gcc) в командной строке. Видимо ручки кривые
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.09.2016, 14:57
Помогаю со студенческими работами здесь

Ошибка при компиляции [Linker Fatal Error] Fatal: Expected a file name:
При компеляции Выдает Fatal: Expected a file name:

[Linker Fatal Error] Fatal: Unable to open file 'CPORTLIBCB6.LIB'
Доброго времени суток, столкнулся с проблемой, как решить не знаю. Использовал для работы с принтером установленный мною компонент...

[Linker Fatal Error] Fatal: Unable to open file 'CXGRIDVCLC6.LIB'
Установил компоненты DevExpress, вроде все нормально, но при компиляции нового проекта выдает: Fatal: Unable to open file...

Игра Скачки! Выдает ошибку: [Linker Fatal Error] Fatal: Expected a file name:
При компиляции проекта, выдает ошибку: Fatal: Expected a file name: , помогите решить данную проблему. Пути к vcl и lib папкам...

Ошибка [Linker Fatal Error] Fatal: Expected a file name:
При запуске любой программы пишет ошибку:-| Скоро курсовую сдавать,а я ее сделать не могу:cry: пишет ошибку: Fatal: Expected a file...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru