`
isiqi
  • 浏览: 16490411 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JNI调用的注意事项

阅读更多

JNI的简单教程网上很多,看看就能够明白,照着操作也基本能够做下来。但是因为大多的教程写的都不够详细,所以在照着操作时候可能会遇到几个小问题,在这里简单总结一下。

1.在C语言环境中编译代码,出现编译错误,类型为找不到jni.h文件。
解决方法:在jdk中寻找到jni.h和jni_md.h文件,将这两个文件拷贝到C语言编译器的include目录中。具体的目录可能会跟编译器有关。比如Dev C++中,将其直接拷贝到include目录下即可。

2.在C语言环境中编译代码,出现编译错误,类型为参数错误。
解决方法:不能简单的把生成的.h文件中的方法名直接拷贝到.c文件中去,需要加入具体的参数。例如JNIEXPORT void JNICALL Java_testdll (JNIEnv *, jclass, jint)应该更改为JNIEXPORT void JNICALL Java_testdll (JNIEnv * para1, jclass, jint para2)。

3.在Java中调用JNI时候,java.lang.UnsatisfiedLinkError错误发生。
解决方法:生成的dll文件放错了位置,所以不能加载dll文件。试试将dll文件放在与class文件同一目录,再试试放在package的根目录。

分享到:
评论

相关推荐

    Jni 调用注意事项

    在使用JNI开发时,理解这些注意事项是至关重要的,能够帮助避免许多潜在的问题和错误,确保本地代码和Java代码之间的无缝交互。同时,使用JNI还涉及到线程安全、错误处理和性能优化等多个方面,这些都是开发者在实践...

    JAVA通过JNI调用C#dll的整个项目工程

    8. **注意事项**: - 需要确保Java和C#的数据类型对应一致,例如Java的`int`对应C#的`int`,Java的`String`对应C#的`string`。 - 注意处理内存管理,JNI和C#对内存的管理方式不同,避免内存泄漏。 - 跨语言调用...

    jni调用c++ delphi中的dll.

    JNI(Java Native Interface)是Java平台提供的一种标准接口,用于在Java...通过以上步骤,你就可以成功地在Java程序中通过JNI调用C++和Delphi编写的DLL函数了。这在需要利用现有本地库或执行低级操作的场合非常有用。

    Java使用jni接口调用C++动态库.docx

    六、注意事项 Java 调用者需要自己生成 JNI 头文件并相应修改 jnisrc 里面 AUTHJNI.cpp 的相关涉及的东西,然后重新编译生成 libauthjni.so,再加上 lib 里面的库一起放到指定的库文件目录,即可使用。 七、JNI 的...

    双向jni调用

    双向调用的注意事项 - 线程安全:Java和C代码可能在不同的线程中运行,因此需要注意线程同步问题。 - 错误处理:C代码没有异常机制,需要通过返回值或设置全局错误状态来处理错误。 - 资源管理:C代码中手动管理...

    Java通过JNI调用C语言函数库的方法.zip

    8. **注意事项** - JNI编程中要处理类型转换、异常处理和内存管理,因为Java和C/C++的内存管理机制不同。 - 调试JNI程序可能会比较复杂,可以使用`printf`或JNI的`NewStringUTF`等方法输出调试信息。 - 当多个...

    jni调用c接口完整例子

    本示例将详细介绍如何通过JNI调用C接口,并提供了一个完整的例子。 1. **JNI基础知识**: - JNI接口定义了一套规范,让Java代码能够声明本地方法,这些方法由非Java代码实现。 - 在Java中,本地方法通过`native`...

    java中使用JNI调用vs2005

    6. **注意事项**: - JNI函数签名非常重要,错误的签名会导致Java虚拟机(JVM)崩溃。 - 在C++代码中,需要处理Java对象和数据类型。例如,`jobject`代表任何Java对象,`jint`代表`int`,`jstring`代表`String`等...

    jni调用

    本篇文章将深入探讨JNI的原理、使用方法以及实践中的注意事项。 1. JNI基础 - JNI定义了一套接口,使得Java代码可以调用本地(非Java)代码,反之亦然。这些接口包括函数指针类型、数据类型转换、异常处理等。 - ...

    在windows中jni(生成dll)Linux中jni(生成so),java调用曾c++

    5. **注意事项和最佳实践** - 确保Java和C++的数据类型兼容,例如,Java的`int`对应C++的`jint`。 - 错误处理:在C++本地方法中,使用JNI的错误处理机制来捕获和报告异常。 - 平台兼容性:确保生成的库是针对目标...

    Android JNI native调用 java层demo TESTJNI.zip

    - 记得在每次JNI调用后检查是否出现异常(`env->ExceptionOccurred()`),并适当处理。 - 使用`LocalRef`、`GlobalRef`和`WeakGlobalRef`管理Java对象引用,防止内存泄漏。 - JNI方法通常在JNI线程中执行,跨线程...

    JNI调用C++动态链接库入门

    #### 四、深入理解与注意事项 - **环境配置**:确保所有路径和环境变量正确无误,这对于跨语言调用尤为重要。 - **API选择**:根据你的具体需求选择合适的JNI API,有些API可能对特定场景更优化。 - **异常处理**:...

    java使用JNI调用C++ dll库用法概述

    下面将详细介绍这个过程,包括基本概念、步骤以及在处理复杂类型如结构体和指针时的注意事项。 1. **JNI基础知识**: - JNI是Java平台标准的一部分,允许Java代码调用本地方法,即用C、C++等本地语言编写的方法。 ...

    JniTest.rar Android Java JNI 调用C++

    6. **注意事项**: - JNI的使用需要谨慎,因为错误的使用可能导致内存泄漏、崩溃或其他难以调试的问题。 - 对于不频繁的调用,JNI带来的性能提升可能并不明显,反而增加了代码复杂性。 7. **示例中的`JniTest`**...

    delphi调用java类的jni完整版

    - **README.TXT**: 提供了简要的使用指南或注意事项。 - **INFO.TXT**: 可能包含更详细的描述、作者信息或版本信息。 - **DOCS**: 可能包含JNI的详细文档,帮助理解和使用提供的示例。 - **PAR**: Delphi的项目文件...

    使用jni调用c++实例

    8. **注意事项** - JNI代码需要处理内存管理,因为Java和C++有不同的内存模型。 - 跨语言调用需要注意类型转换和异常处理。 - 如果涉及多线程,需要确保线程安全。 9. **文档资源** - 阅读`JNI_Android项目中...

    android jni 调用本地函数 c++ 格式

    10. **优化和注意事项** - 使用JNI可能导致内存泄漏,尤其是忘记释放本地引用。 - 跨线程调用JNI函数需谨慎,可能需要同步原生和Java线程。 - 考虑到性能,尽量减少JNI调用次数,避免大量数据在Java和C++间来回...

    Java采用JNI调用VC++生成的dll(Java与C++交互)

    在Java编程中,有时我们需要调用已有的C++代码或者利用C++的...通过以上步骤和注意事项,你可以成功地在Java中利用JNI调用C++生成的DLL,实现Java与C++之间的交互,满足项目中特定功能的需求,如本例中的图片匹配功能。

    android jni 调用

    5. **注意事项** - **内存管理**:Java和C/C++有各自的内存管理机制,需注意避免内存泄漏和悬挂指针。 - **线程安全**:JNI代码可能在多个线程中并发执行,需要考虑线程同步问题。 - **错误处理**:本地方法中应...

    Android JNI调用c语言加密程序

    **安全注意事项** 在实现加密功能时,必须注意以下几点: 1. **正确管理内存**:C语言没有自动垃圾回收,需要手动释放分配的内存。 2. **防止缓冲区溢出**:加密解密过程中,确保输入和输出大小被正确处理,避免内存...

Global site tag (gtag.js) - Google Analytics