Articles of jni

在Windows下创build64位jni

同时移植工具到不同的系统我遇到一个问题与Windows 64位。 我已经用linux 32/64和windows32成功构build了dll。 我已经用msys尝试过mingw-64,但不幸的是我只能得到32位的dll。 这是我的脚本获取DLL的一部分 gcc -o tool_jni.dll -static-libgcc -static-libstdc ++ -Wl,-add -stdcall -alias -shared -IC:/java/jdk/include -IC:/java/jdk/include/win32 $ SOURCES 我得到没有错误消息,只是不是所需的DLL 我对任何解决scheme都是开放的。 我不必使用脚本,我只需要DLL。

使用JNI的Java VM EXCEPTION_ACCESS_VIOLATION?

如果有人可以帮我解决我的问题。 当我尝试通过使用API​​ jni来运行DLL中的函数时,JMV会产生这样的怀疑: # # An unexpected error has been detected by Java Runtime Environment: # # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000077503290, pid=4796, tid=5348 # # Java VM: Java HotSpot(TM) 64-Bit Server VM (10.0-b19 mixed mode windows-amd64) # Problematic frame: # C [ntdll.dll+0x53290] # # An error report file with more information is saved as: # […]

在本地库中查找暴露的方法来访问JNA / JNI?

嗨:我想用JNA来访问本地库中的一些函数。 1)我如何反思本机库文件(例如.so文件),看看有什么方法可用? 2)在.so文件中可访问的方法和为编译这些文件而构build的C代码之间是否存在一对一映射? 3)JNA是否可以在所有只有java / native互操作涉及从Java调用本机库的情况下工作(我认为这是JNA的经典用例),还是有时需要JNI?

调用DestroyJavaVM后重新调用JNI_CreateJavaVM返回-1

调用DestroyJavaVM后,我试图调用JNI_CreateJavaVM。 我按照以下顺序调用它们:InitJVM – > ReleaseJVM – > InitJVM 初始化时,JNI_CreateJavaVM返回0,并正常工作。 第二次在销毁后初始化时,JNI_CreateJavaVM返回-1而不起作用。 会有什么问题? 这是一个创buildJVM的函数: #elif __linux HRESULT PWNJava::InitJVM(void) { if(m_bRunning) { Log("Error : JVM is already Running! (PWNJava::Init)"); return PWN_FAIL; } const int kNumOptions = 3; JavaVMOption options[kNumOptions] = { { const_cast<char*> ("-Xmx128m"), NULL}, { const_cast<char*> ("-verbose:gc"), NULL}, { const_cast<char*> ("-Djava.class.path=../../Class"), NULL} }; JavaVMInitArgs vm_args; vm_args.version = […]

如何获得每个进程的准确CPU使用率和进程空闲CPU时间

我一直在努力获得准确的CPU使用每个进程和进程空闲CPU时间..我试着“顶部”命令proc / [pid] / stat文件夹,但仍然试图我的运气.. TOP命令为fg(前台)和bg(后台)中运行的所有进程提供了CPU使用情况,但是它不是那么准确,因为它显示%CPU 0,即使进程在后台运行..任何其他办法? 请帮忙

Android的JNI,如何用soname libxx.so.1.2.3加载库

需要从第三方使用Android的共享库,lib的soname和文件名是相同的,格式为libxx.so.1.2.3,这是linux上常见的。 我将lib文件重命名为libxx.so,并使用ndk-build将libxx.so链接到libmyjni.so中。 在我的java代码中,在调用libmyjni.so中的函数之前,我像这样加载它们: System.load("/data/local/tmp/libxx.so.1.2.3"); System.loadLibrary("myjni"); 我必须手动将libxx.so.1.2.3复制到/ data / local / tmp /。 这种方式很好用,上面的加载之后,我可以调用libmyjni.so中的函数。 在代码“System.loadLibrary(”myjni“);”中,系统总是试图从某处获取libxx.so.1.2.3。 我想知道,在现实世界中,如何在安装过程中将libxx.so.1.2.3复制到android设备上的特定位置? 这样我就可以System.load()了。 或android有官方的方式来安装自制lib到/ system / lib /? 如果libxx.so.1.2.3的格式为libxx.so,那么我可以使用System.loadLibrary(“xx”)加载它。

Bash脚本创build符号链接到共享库

我认为这个问题对于你的shell脚本怪物是相当容易的。 我正在寻找最优雅和最简单的方式来创build符号链接到Unix的共享库通过bash shell脚本。 我需要的是从“libmythings.so.1.1,libotherthings.so.5.11”等共享库文件列表开始,获取创build的符号链接,例如: libmythings.so -> libmythings.so.1 -> libmythings.so.1.1 libotherthings.so -> libotherthings.so.5 -> libotherthings.so.5.11 库文件位于包含其他文件(如其他shell脚本)的目录中。 编辑 :好,“ldconfig -nN”。 可以正常工作,但是我还需要链接,没有在“.so”之后附加的库的主要编号,至less有一个库,因为一个或多个库是来自Java的JNI调用的入口点,所以当一个库通过System.loadlibrary(“libraryname”)的方式实例化,它期望一个名为“libraryname.so”的库,而不是“libraryname.so.X”。 只有ldconfig -nN的解决scheme可以工作,如果有Java部分的解决方法。

适用于Linux Java Swing应用程序的Kiosk模式

如何禁用[Ubuntu] Linux机器上的操作系统级键盘快捷键(例如Alt-Tab,Ctrl-Alt-Left / Right等)? 我正在开发一个全屏的Java Swing应用程序,并且不希望用户能够任意切换程序。 切换“永远在上”标志是不够的, 用户不得被允许切换工作区,迁移焦点或任何其他类似的东西。 在执行应用程序之前和之后,机器必须正常工作。 谷歌说,这将需要JNI或JNA,但我正在寻找更多的手持。

Linux上的JDK 1.8缺lessJNI包含文件

我正在编译下面的项目: https://github.com/entropia/libsocket-can-java 我总是得到这个错误信息? 有谁知道如何解决这个问题,是否可能是Linux上的JDK 1.8.0.11(x64 Debian Wheezy)中的错误? In file included from jni/de_entropia_can_CanSocket.h:2:0, from jni/cansocket.cpp:23: /opt/jdk1.8.0_11/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory #include "jni_md.h" ^

Linux上的JNI问题:无法打开共享对象文件

我已经在这里看到了这个问题,尝试了所提出的修复,但迄今为止还没有成功。 我有一些Java的经验,但JNI很久以前,从来没有在Linux上做过,但… 我试图得到一个简单的HelloWorld JNI应用程序在Linux上运行。 小java文件: class HelloWorld { private native void print(); public static void main(String[] args){ new HelloWorld().print(); } static { System.out.println(System.getProperty("java.library.path")); System.loadLibrary("HelloWorld"); } } 小C文件: #include <jni.h> #include <stdio.h> #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; } 通过以下方式编译C文件: gcc -shared -Wall -fPIC HelloWorld.c -I/usr/lib/gcc/x86_64-redhat-linux/3.4.3/include/ -o libHelloWorld.so 运行应用程序: […]