草庐IT

Hello-Jni

全部标签

Windows 上的 Java JNI 和依赖库

长话短说:我有一个可执行jar,它调用依赖于lib.dll的jni.dll。我遇到了可怕的UnsatisfiedLinkError。This根据我的经验,答案非常接近,但未能解决问题。即使在java.library.path中指定了dll所在的文件夹,它也不会工作。我还必须更改WindowsPATH环境变量。事实上,Windows上默认的java.library.path似乎是PATH。有什么“漂亮”的方法可以解决这个问题吗?我想为Windows构建一个安装程序,我想知道我将如何处理这个问题,这样最终用户就不必做任何手动工作。编辑:我实现的是以下内容:应用程序附带一个名为“native

java - 如果我的 java Hello World 程序在包内,为什么我不能运行它?

我创建了一个名为“Hello.java”的文件,如下所示:publicclassHello{publicstaticvoidmain(String[]args){System.out.println("Hello,world!");}}我运行了javacHello.java,然后是javaHello,一切都按预期运行。然后我将行packagetestpackage;添加到文件的顶部,并将其放在目录/home/matthew/Desktop/hellotest/testpackage中。我将.:/home/matthew/Desktop/hellotest放在我的CLASSPATH中,然

java - JNI- FindClass 函数返回 null

我有一个简单的java类(“MainX”),我使用shell脚本和eclipse编译它。当我调用env->FindClass("MainX")函数时,从脚本生成的MainX.class文件返回null,而从eclipse生成的MainX.class文件返回该类,然后执行runMainX函数。生成的MainX.class文件与JNIC++可执行文件位于同一文件夹中。MainX.javapublicclassMainX{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubSystem.out.println(ne

java - 使用 SWIG 的 C 函数的 JNI 包装器 - 类型映射应该是什么?

我正在尝试为C中的以下函数创建JNI包装器:interr=new_instance(constchar*name,instance_t*instance);名称-输入,实例-输出interr=get_value(constinstance_tinstance,int*val);instance-输入,val-输出其中instance_t定义为:typedefvoid*instance_t;我完全迷失在Java的SWIG手册中,因为它不仅仅支持输入参数作为输出类型。我对Python包装器(如下所示)没有任何问题。在Java的情况下,typemap的正确使用方法是什么?//instance

java - Java JNI 调用的开销

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:WhatmakesJNIcallsslow?首先让我说,这个问题更多是出于好奇而不是真正的需要。我很想知道从Java进行JNI调用的开销是多少,比如说System.arraycopy与分配数组并使用for循环复制元素相比。如果开销很大,那么可能有一个粗略的“魔数(MagicNumber)”元素,它可以通过简单地使用for循环来补偿,而不是使用系统调用。而且,导致这种开销的系统调用到底涉及什么?我猜堆栈必须被推送到调用的上下文中,这可能需要一段时间,但我找不到对整个过程的很好的解释。让我澄清一下我的问题:我知道使

java - JNI Hello World 不满意的链接错误

这是我第一次尝试JNI。我的最终目标是让所有任务当前在一台机器上运行,但需要运行一个简单的示例。当我尝试执行我的主程序时,我不断收到此错误。我提供了我的简单Java主程序、生成的头文件和错误。我不知道这个DLL可能依赖于什么。它最初引用了一个我跟踪并放入system32(msvcr90.dll)的DLL。这是我用来编译C代码以及生成DLL、OBJ、LIB、EXP和list文件的命令。cl-I"C:\ProgramFiles\Java\jdk1.6.0\include"-I"C:\ProgramFiles\Java\jdk1.6.0\include\win32"-MD-LDHelloWo

java - Android (ART) 崩溃并出现错误 JNI DETECTED ERROR IN APPLICATION : jarray is an invalid stack indirect reference table or invalid reference

我正在编写一个处理来自原生C(NDKr10d)的图片的Android应用程序。在最近对JNI更加严格的ART引入之前,代码一直运行良好。所以代码在Dalvik上运行良好(例如,在Lolipop之前的设备上),但ii在最新的手机上创建了一个SIGENV。我现在得到错误:04-2616:18:34.169:E/art(21443):0xb4a2dd00SpaceTypeMallocSpacebegin=0x12c00000,end=0x12e01000,limit=0x32c00000,size=2MB,capacity=192MB,non_growth_limit_capacity=51

java - JNI Android - 将 char* 转换为字节数组并将其返回给 java

我最初使用一个函数将char*作为UTF-8字符串返回给java,但由于我不断出错,我编写了以下函数将char*作为Java返回>byte[],这样我就可以尝试在Java端将数组转换为字符串:jbyteArrayJava_com_vektor_amapper_util_InputDeviceManager_getDevNameBytes(JNIEnv*env,jobjectthiz,jintindex){if(pDevs[index].device_name==NULL)returnNULL;intn=0;while(pDevs[index].device_name){n++;}if(

java - JNI 附加/分离线程内存管理

我有一个JNI回调:voidcallback(Data*data,char*callbackName){JNIEnv*env;jvm->AttachCurrentThread((void**)&env,NULL);/*startusefulcode*//*endusefulcode*/jvm->DetachCurrentThread();}当我这样运行它(空的有用代码)时,我发生了内存泄漏。如果我注释掉整个方法,就没有泄漏。附加/分离线程的正确方法是什么?我的应用程序处理实时声音数据,因此负责数据处理的线程必须尽快完成,以便为下一批处理做好准备。因此,对于这些回调,我创建了新线程。每秒

openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读

monado系列文章索引汇总:openxrruntimeMonado源码解析源码分析:源码编译准备工作说明hello_xr解读openxrruntimeMonado源码解析源码分析:整体介绍模块架构模块作用进程线程模型整体流程openxrruntimeMonado源码解析源码分析:CreateInstance流程(设备系统和合成器系统)Compositorcomp_mainclientcompositoropenxrruntimeMonado源码解析源码分析:Prober设备发现和管理systemdeviceHMDtargetinstanceopenxrruntimeMonado源码解析源码分