|
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10
|
|
JNI fatal error21.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
|
|
| 21.09.2016, 12:45 | |
|
Ответы с готовыми решениями:
5
Fatal error. IntelliJ IDEA [Linker Fatal Error] Fatal: Could not open ~CBuilder6\Projects\Project1.exe (error code 5)
|
|
1 / 1 / 1
Регистрация: 10.08.2016
Сообщений: 10
|
|
| 22.09.2016, 09:09 [ТС] | |
|
С помощью assert(0) убедился, что не происходит выход из очередного метода GetIntArrayElements. Понятно что в приведённом С коде просто негде ошибиться
Может проблема быть с неправильными параметрами при компиляции или с различной разрядностью: у меня процесор 64 бит, java и соответственно приложение 32 бит, подключаемая библиотека 32 бит?
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
|
|
| 24.09.2016, 14:57 | |
|
Помогаю со студенческими работами здесь
6
Ошибка при компиляции [Linker Fatal Error] 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' Игра Скачки! Выдает ошибку: [Linker Fatal Error] Fatal: Expected a file name: Ошибка [Linker Fatal Error] Fatal: Expected a file name: Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Функция установки текстового статуса в реквизите формы документа
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.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|