java Native Interface JNI的使用-HelloNative

关于JNI入门,这篇文章值得一看:https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

以下为本人在Ubuntu下的实践。

首先写java文件:

public class HelloNative {

        static {
                System.loadLibrary("HelloNative");
        }
        private static native void sayHello();

        @SuppressWarnings("static-access")
        public static void main(String[] args) {
                new HelloNative().sayHello();
        }

}

这里注意最好不要添加包名,否则生成h文件会比较难处理。
然后生成.class文件和.h文件:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */

#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     HelloNative
* Method:    sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
 (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

使用C++编写sayHello函数如下:

#include <jni.h>
#include <iostream>
#include "HelloNative.h"
using namespace std;

// Implementation of native method sayHello() of HelloJNI class
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jclass){
    cout << "Hello World from C++!" << endl;
    return;
}

然后编译生成.dll文件:

The program 'x86_64-w64-mingw32-g++' is currently not installed. You can install it by typing:
sudo apt-get install g++-mingw-w64-x86-64

提示未安装,那就按照提示安装一下命令。过程不是很顺利,第一次尝试未完成安装,根据提示添加
fix-missing
后安装成功,但再次运行时又遇到了问题:

fatal error: jni.h: No such file or directory
 #include <jni.h>

第一次运行配置环境总会花很多精力,使用locate jni.h可查看jni.h的路径,其他文件类似。通过把缺失的.h文件复制到需要使用其的目录下解决问题(曲线救国哈哈)。
最后终于生成了.dll文件,尝试使用java命令运行程序的时候,又出问题了.

Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
    at java.lang.Runtime.loadLibrary0(Runtime.java:870)
    at java.lang.System.loadLibrary(System.java:1122)
    at HelloNative.<clinit>(HelloNative.java:5)

应该是DLL文件生成有问题,后续待解决。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 命题作文:对Java Native Interface (JNI) 有一个认识,使用JNI完成一个打印输出的工作。...
    Silly_N_Fool阅读 1,322评论 0 4
  • native关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)...
    时待吾阅读 647评论 0 2
  • 目录 什么是JNI?为什么使用JNI?怎么使用JNI?在IntelliJ IDEA里使用JNI 1. 什么是JNI...
    xiangang阅读 12,590评论 1 12
  • 说说我眼中的聂隐娘。有人看到风景如画,有人看到服饰文化,有人看到争权夺利,有人看到人性善恶,我只看到戏里戏外的一声...
    李清潼阅读 377评论 0 1
  • 分布式系统的分布式是指多台机器组成一个整体,具备存储和计算能力,理想情况下一个分布式系统可以像单机一样使用,只需要...
    王谙然阅读 1,344评论 0 2

友情链接更多精彩内容