Пишу приложение на Java
, использующее dll-библиотеку
методов, реализованных на С++
(технология JNI
).
Оказалось, что для разной разрядности установленной на машине java
нужно собирать dll-библиотеку
соответствующей разрядности.
Собираю библиотеку из консоли с помощью компилятора VS
так:
cl methods.cpp -methods.dll -MD -LD -I "C:\Program Files\Java\jdk1.8.0_101\include" -I "C:\Program Files\Java\jdk1.8.0_101\include\win32"
И таким образом, из командной строки VS2012 x64 Native Tools
собираю x64 библиотеку; из командной строки VS2012 x86 Native Tools
- x32 библиотеку.
У меня стоит java 64-bit и библиотека x64 работает корректно.
Запустив приложение на машине х32
, при вызове методов из библиотека происходит экстренное закрытие приложения
и появляется файл логов.
Помогите, пожалуйста, не пойму, почему собранная х64 dll-библиотека
работает как надо, а при вызове х32 dll-библиотеки
это происходит.
Файл логов с след содержанием:
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x685f5ff7, pid=6084, tid=5052
JRE version: Java(TM) SE Runtime Environment (8.0_45-b15) (build 1.8.0_45-b15) Java VM: Java HotSpot(TM) Client VM (25.45-b02 mixed mode windows-x86 ) Problematic frame: C [methods32.dll+0x25ff7]
Failed to write core dump. Minidumps are not enabled by default on client ersions of Windows
If you would like to submit a bug report, please visit: http://bugreport.java.com/bugreport/crash.jsp The crash happened outside the Java Virtual Machine in native code. See problematic frame for where to report the bug.
--------------- T H R E A D ---------------
Current thread (0x1475c000): JavaThread "JavaFX Application Thread" [_thread_in_native, id=5052, stack(0x14f50000,0x14fa0000)]
Register to memory mapping:
EAX=0x14f50000 is an unknown value EBX={method} {0x1a576884} 'normaT' '(Ljava/lang/String;)I' in 'my/frequencyMag/methodsFromC/Methods' ECX=0x14f1d774 is an unknown value EDX=0x00000000 is an unknown value ESP=0x14f9b190 is pointing into the stack for thread: 0x1475c000 EBP=0x14f9b198 is pointing into the stack for thread: 0x1475c000 ESI={method} {0x1a576884} 'normaT' '(Ljava/lang/String;)I' in 'my/frequencyMag/methodsFromC/Methods' EDI=0x1475c000 is a thread
Stack: [0x14f50000,0x14fa0000], sp=0x14f9b190, free space=300k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) C [methods32.dll+0x25ff7] j my.frequencyMag.methodsFromC.Methods.normaT(Ljava/lang/String;)I+0 j my.frequencyMag.controller.adminController.dialog.AddTextController.addText(Ljava/util/ArrayList;I)V+598 j my.frequencyMag.controller.adminController.dialog.AddTextController.srartStandart(Ljavafx/event/ActionEvent;)V+50 v ~StubRoutines::call_stub V [jvm.dll+0x155cb5] ...
--------------- P R O C E S S ---------------
Java Threads: ( => current thread ) 0x147ef000 JavaThread "Swing-Shell" daemon [_thread_blocked, id=4652, stack(0x19700000,0x19750000)] 0x147f0400 JavaThread "TimerQueue" daemon [_thread_blocked, id=2804, ...
Other Threads: 0x1426c000 VMThread [stack: 0x03ca0000,0x03cf0000] [id=2180] 0x142ccc00 WatcherThread [stack: 0x146f0000,0x14740000] [id=1016]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread: None
Internal exceptions (10 events): Event: 15.130 Thread 0x14aa4000 Exception (0x03eccba0) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u45\3627\hotspot\src\share\vm\prims\jni.cpp, line 709] Event: 17.657 Thread 0x1475c000 Exception (0x03e368f0) thrown at [C:\re\workspace\8-2-build-windows-i586-cygwin\jdk8u45\3627\hotspot\src\share\vm\runtime\sharedRuntime.cpp, line 605] ...
Возможно вы не коректно обрабатываете строки, и вроде ругается на NormalT, я не разбираюсь в JNI, поэтому код не могу привести
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Доброго времени сутокВопрос первый: Подскажите пожалуйста где правильно писать проверку на нахождение на нужной странице и нужно ли вообще...
При вызове removeViev() окно не закрывается на android 50 (возможно на других версиях тоже, не проверял)
Всем привет, подскажите пожалуйста нужно сделать вертикальный разделитель пунктирный без изображений с помощью border-left css, если есть содержимое...
ЗдравствуйтеУ меня на странице есть динамическое добавление полей input