草庐IT

hello-jni

全部标签

java - JNI - C++/Java 中的监听器 - 是否可以在 C++ 中实例化 Java 对象并将它们用作参数

以下是否可与JNI一起使用?publicNativeClass{static{System.loadLibrary("dll");}publicstaticnativevoidaddListener(Listenerlistener);}publicinterfaceListener{publicvoideventOccurred(Infoinfo);}publicInfo{privatefinalStrings1;privatefinalStrings2;publicInfo(Strings1,Strings2);//...gettersforuseinJava}是否可以在dll上注

java - 使用 undefined symbol 加载 JNI 时崩溃

我正在尝试将我的native库链接到Java应用程序,但是当我尝试运行它时,我得到一个java.lang.UnsatisfiedLinkError异常,提示缺少符号(_ZTVN10__cxxabiv117__class_type_infoE)我像使用任何其他共享库一样使用g++编译共享库。这是我第一次尝试使用JNI,我不知道如何正确链接所有内容。 最佳答案 您可以使用工具链附带的c++filt可执行文件来分解丢失的符号。然后就是弄清楚代码的哪一部分没有做它应该做的事情。nm可用于列出代码中定义的符号。如果您看到某个符号在同一行上有一

c++ - 在 JNI 中,是否有针对从 AttachCurrentThread() 返回的 JNIEnv 指针的清理函数?

我想知道从JNI函数AttachCurrentThread()获得的JNIEnv*的生命周期。考虑以下检索JNIEnv指针的函数。JNIEnv*RetrieveJniEnvPtr(){JavaVM*pJavaVM;//AssumepJavaVMisalreadyinitializedJNIEnv*pEnv=NULL;if(pJavaVM->GetEnv((void**)&pEnv,JNI_VERSION_1_6)!=JNI_OK){pJavaVM->AttachCurrentThread((void**)&pEnv,NULL);}returnpEnv;}是否有与调用AttachCurr

一周学会Django5 Python Web开发-Django5 Hello World编写

锋哥原创的PythonWeb开发Django5视频教程:2024版Django5Pythonweb开发视频教程(无废话版)玩命更新中~_哔哩哔哩_bilibili2024版Django5Pythonweb开发视频教程(无废话版)玩命更新中~共计14条视频,包括:2024版Django5Pythonweb开发视频教程(无废话版)玩命更新中~、第2讲Django5安装、第3讲Django5创建项目(用命令方式)等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV14Z421z78C/前面对应用创建和应用配置掌握后,我们来编写第一个HelloWo

java - 它不会创建 Java VM (JNI)

我的简单命令行应用程序:int_tmain(intargc,_TCHAR*argv[]){JavaVM*jvm;JNIEnv*env;JavaVMInitArgsvm_args;JavaVMOptionoptions[1];options[0].optionString="-Djava.class.path=.";//Pathtothejavasourcecodevm_args.version=JNI_VERSION_1_6;//JDKversion.Thisindicatesversion1.6vm_args.nOptions=1;vm_args.options=options;vm

c++ - JNI C++ 调试技术?

我有一个创建JVM并进行JNI调用的LinuxC++应用程序。我是JNI的新手,到目前为止,我发现在开发过程中调试我的应用程序的唯一有效方法是反复试验。有哪些技术可用于调试臭名昭著的“Java运行时环境检测到fatalerror”JavaVM崩溃?我如何知道问题是我的代码还是真正的JVM错误?总的来说,到目前为止我所知道的显而易见的事情是:在代码中,始终检查从JNI调用返回的jobject、class和jmethodID值是否为NULL值,然后再继续。在适当的时候调用env->ExceptionCheck()以确保没有未决的异常。目前,我遇到了错误报告文件中的堆栈跟踪没有帮助的问题:#

java - JNI : How to handle the creation/removal of wrapped C++ object

我想包装一个C++对象,以便我可以从Java访问它。通过阅读jniandusingc++new'edobjectsinjava,我了解了如何在我的Java包装器类中保存对我的C++对象的引用。.不过,我还没有弄清楚的一件事是如何处理我的C++对象的创建和删除。当然,我可以引入创建和删除我的C++对象的native方法,但这意味着我必须在Java中自己处理内存管理……不是很Javaish。在我的Java包装器对象创建和垃圾收集时,是否有任何我应该实现的本地方法被调用? 最佳答案 您必须编写native方法来创建和销毁您的C++对象。关

java - 如何定义泛型类的 JNI 方法签名?

我有一个用java定义的基类。我想像这样调用本地方法:publicclassBase{publicvoiddoSomething(){nativeDoSomething();}privatenativevoidnativeDoSomething();}我的问题是,如何指定泛型类的jni方法签名? 最佳答案 我来晚了,但我会添加它以供将来引用。Java中的泛型是使用TypeErasure实现的,基本上是:泛型只存在于编译时:它们在那之后就消失了,不存在于运行时。这意味着,即使您可以拥有类似publicnativevoidblah(Eg

c++ - Hello World CUDA 编译问题

我正在使用CUDAbyExample书并尝试编译书中的第一个真实示例。我在OSX10.9.2上:我的来源是:@punk~/Documents/Projects/CUDA$/Developer/NVIDIA/CUDA-6.0/bin/nvcchello.cnvccwarning:The'compute_10'and'sm_10'architecturesaredeprecated,andmayberemovedinafuturerelease.hello.c:6:1:error:unknowntypename'__global__'__global__voidkernel(void){^

java - 通过 jni 将每个引用的参数从 C++ 传递到 Java

我正在尝试通过JNI将每个引用的变量从C++传递到Java。一开始,我尝试了一些简单的代码:Javapublicstaticvoidinc(intval){System.out.println("inccalled:"+val);val++;}publicstaticvoiddec(intval){System.out.println("deccalled:"+val);val--;这应该简单地增加/减少使用Java方法在C++代码中创建的变量。C++部分如下所示:C++jmethodIDjDec=env->GetStaticMethodID(cls,"dec","(I)V");jme