`
天天向上1989
  • 浏览: 418141 次
  • 性别: Icon_minigender_2
  • 来自: 南京
社区版块
存档分类
最新评论

【转】 JNI调用错误: No implementation found for native

 
阅读更多

JNI 调用时,一直报 No implementation found for native

 

有一个可能是,如果调用的是C++的代码,必须加extern "C"

 

【转】 jni 调用c和c++的区别.

 

1、JNIEnv *env参数的使用

所有JNI接口的第一个参数是JNIEnv *env, 在C中,使用方法是

(*env)->NewStringUTF(env, "Hello from JNI!");

但在C++中,其调用方法是

env->NewStringUTF("Hello from JNI!");

为什么有这种区别呢,看看jni.h中关于JNIEnv的定义就可以知道了:

#if defined(__cplusplus)

typedef _JNIEnv JNIEnv;

#else

typedef const struct JNINativeInterface* JNIEnv;

#endif

可以看到,对于C和C++,定义有所不同,主要原因是C不支持类,所以采用了一种变通的方法。

 

2、接口找不到

在Java中调用JNI接口时,出现异常,察看日志,发现有如下错误:

WARN/dalvikvm(422): No implementation found for native Lcom/whty/wcity/HelixPlayer;.setDllPath (Ljava/lang/String;)V

检查了几遍代码,Cpp中确实定义了这个接口,而且仔细对照了Java的包名、类名,确实没有错误,那为什么会出现这种问题呢。后来突然想到,JNI接口 都是以C的方式定义的,现在使用C++实现,函数定义前是否需要加上extern "C"呢?为此定义了一个头文件,在CPP文件中include该头文件,头文件加上如下代码片断:

#ifdef __cplusplus

extern "C" {

#endif

#endif

...

#ifdef __cplusplus

}

再次尝试,调用成功!

 

分享到:
评论

相关推荐

    JNI实战一:向Native层传递一个类,并从Native层返回一个类

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在实际开发中,我们有时需要利用C/C++等本地语言的高性能特性,或者调用已有的库,这时就会用到JNI。本篇将探讨...

    jni开发demo:通过jni将一张彩色图片转换为黑白图片

    JNI(Java Native Interface)是Java平台提供的一种标准接口,它允许Java代码和其他语言写的代码进行交互。在Android系统中,JNI被广泛应用于性能优化、调用底层库、访问硬件设备等场景。本示例"jni开发demo:通过...

    Android使用JNI调用Python so解释器

    在Android平台上,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。JNI在许多场景下被广泛使用,例如优化性能、访问特定硬件功能或利用已有的C/C++库。在这个特殊的场景中,我们...

    Android通过JNI调用.so动态库

    Android 通过 JNI(Java Native Interface)调用.so 动态库是 Android 开发中的一种常用技术。JNI 是一种允许 Java 代码与 native 代码之间进行交互的接口。通过 JNI,我们可以在 Android 项目中调用.so 动态库中的 ...

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

    Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能场景。JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。C# ...

    AndroidStudio环境下的jni调用(NDK)

    AndroidStudio环境下的jni调用(NDK),这个教程可以让完全不会AndroidStudio的人学会jni调用。完全步骤话,非常简单。

    android 使用jni调用c++

    在Android开发中,JNI(Java Native Interface)是一个关键特性,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如利用C++的高性能处理图像、音频或者进行复杂的数学运算,以及接入原生...

    JNI学习二:字符串参数传递与返回值

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在本示例中,我们关注的是JNI中的字符串参数传递和返回值处理,这对于那些需要在Java和C/C++之间进行深度集成的...

    jni.rar_JNI编程_java jni_jni_site:www.pudn.com

    JNI(Java Native Interface)是Java平台提供的一种标准接口,它允许Java代码和其他语言写的代码进行交互,特别是C和C++。JNI在很多场景下都扮演着重要的角色,比如提升性能、利用现有C/C++库、操作系统级别的交互等...

    Android应用程序使用JNI调用驱动程序

    在Android应用程序开发中,有时需要访问底层硬件功能或者优化性能,这时就可能需要用到JNI(Java Native Interface)技术来调用C/C++代码。JNI允许Java应用程序与本地代码进行交互,包括操作系统内核、驱动程序等。...

    GMSSL的java调用(JNI库和调用实例).zip

    在这个“GMSSL的java调用(JNI库和调用实例).zip”压缩包中,我们主要探讨如何在Java环境中通过JNI(Java Native Interface)来调用GMSSL库,以便利用这些国密算法进行数据加解密和哈希运算。 首先,我们需要了解...

    Android JNI native调用 java层demo TESTJNI.zip

    本文将深入探讨在Android中如何使用JNI,特别是如何从C++ native代码调用Java层的类、方法、属性以及接口,同时涉及线程回调接口的实现。 首先,我们需要了解JNI的基本结构。一个典型的JNI应用会包含Java源文件、C/...

    Java JNI调用IC卡读卡器

    Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多情况下被用来调用本地库,比如C、C++编写的库,这在处理特定硬件设备或者高性能计算时非常有用。在...

    JNI DEMO:java jni技术 调用 c/c++ 的dll

    JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。JNI在许多场景下非常有用,比如当需要调用已有的C/C++库或者需要利用硬件特性时。在这个"JNI DEMO"中,我们将...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    ### 使用JNA替代JNI调用DLL,并解决内存溢出问题 #### 问题背景 在项目的开发过程中,常常遇到需要处理二进制流数据并对其进行解析处理的情况。这种情况下,如果上层应用平台采用的是Java开发,而底层算法或数据...

    jni调用IE,延迟一段时间关闭

    标题中的“JNI调用IE,延迟一段时间关闭”指的是在Java程序中通过JNI(Java Native Interface)技术调用本地系统资源,比如Internet Explorer浏览器,并且在指定的时间延迟后自动关闭浏览器。这种技术通常用于自动化...

    JNI调用C++的应用实例

    《JNI调用C++的应用实例》 JNI,全称Java Native Interface,是Java平台中用于实现Java代码与其他语言(如C/C++)交互的关键技术。自Java 1.1起,JNI已成为Java平台的标准组成部分,它允许Java应用程序利用本地代码...

    JAVA如何调用dll:用JNI调用C或C++动态联接库原来如此简单

    在Java编程环境中,有时我们需要利用已经存在的C或C++库,这时可以借助Java Native Interface (JNI) 来实现。JNI允许Java代码和其他语言写的代码进行交互,包括调用C/C++编译的动态链接库(DLL)文件。下面将详细...

    JNI 调用实例(java JNI cpp互相调用实例)

    本文旨在介绍 Java 和 C++ 之间的互相调用实例,通过 JNI(Java Native Interface)技术,实现 Java 调用 C++ 和 C++ 调用 Java 的操作。下面将对标题、描述、标签和部分内容进行详细说明。 标题:JNI 调用实例...

    JAVA JNI调用DLL完整步骤

    Java Native Interface (JNI) 是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在某些场景下,比如调用操作系统特定的功能或者利用已有的C/C++库,我们需要使用JNI来实现Java与本地代码(如...

Global site tag (gtag.js) - Google Analytics