您现在的位置是:主页 > news > 校园图书回收网站建设/壹起航网络推广的目标

校园图书回收网站建设/壹起航网络推广的目标

admin2025/6/24 17:46:56news

简介校园图书回收网站建设,壹起航网络推广的目标,专门做澳大利亚项目的网站,企业型网站制作简介 JNI的实现步骤如下: 编写带有native声明的方法的Java类 使用javac命令编译编写的Java类 使用java -jni className 来生成后缀名为.h的头文件 使用其他语言(C、C)实现本地方法 将本地方法编写的文件生成动态链接库 我们开始来编写一个…

校园图书回收网站建设,壹起航网络推广的目标,专门做澳大利亚项目的网站,企业型网站制作简介 JNI的实现步骤如下: 编写带有native声明的方法的Java类 使用javac命令编译编写的Java类 使用java -jni className 来生成后缀名为.h的头文件 使用其他语言(C、C)实现本地方法 将本地方法编写的文件生成动态链接库 我们开始来编写一个…

简介

JNI的实现步骤如下:

  1. 编写带有native声明的方法的Java类
  2. 使用javac命令编译编写的Java类
  3. 使用java -jni className 来生成后缀名为.h的头文件
  4. 使用其他语言(C、C++)实现本地方法
  5. 将本地方法编写的文件生成动态链接库

我们开始来编写一个简单的Java call C

1、编写含有native方法的Java类

public class HelloWorld {public native void hello();static {//设置查找路径为当前项目路径System.setProperty("java.library.path", ".");//加载动态库的名称System.loadLibrary("hello");}public static void main(String[] args) {new HelloWorld().hello();}
}

2、编译代码

在终端执行 : javac HelloWorld.java

这时会生成HelloWorld.class 文件

3、使用java -jni className 生成后缀名为.h的头文件

在终端执行 : java HelloWorld

这时会生成HelloWorld.h 头文件. 此文件内容不能修改。看下它的内容 :

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     HelloWorld* Method:    hello* Signature: ()V*/
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif

4、使用C语言实现本地方法

创建 HelloWorldImpl.c 文件

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){printf("Hello World!\n");return;
}

5、将本地方法编写的文件生成动态链接库

使用命令生成动态链接库:

gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib

libhello.jnilib 就是生成的动态链接库。但是运行这个命令报错了 :

In file included from HelloWorldImpl.c:1:
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include/jni.h:45:10: fatal error: 'jni_md.h' file notfound
#include "jni_md.h"^
1 error generated.

提示jni_md.h这个文件找不到;我们执行下面的命令拷贝一份:

sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include

在当前目录下执行 : ls -al

drwxr-xr-x  8 pengwei.xpw  staff   272 Sep 10 15:31 .
drwxr-xr-x  6 pengwei.xpw  staff   204 Jan  8  2017 ..
-rw-r--r--  1 pengwei.xpw  staff   567 Sep 10 15:25 HelloWorld.class
-rw-r--r--  1 pengwei.xpw  staff   377 Sep 10 15:26 HelloWorld.h
-rw-r--r--  1 pengwei.xpw  staff   341 Sep 10 15:25 HelloWorld.java
-rw-r--r--  1 pengwei.xpw  staff   174 Sep 10 15:26 HelloWorldImpl.c
drwxr-xr-x  3 pengwei.xpw  staff   102 Nov  1  2016 com
-rwxr-xr-x  1 pengwei.xpw  staff  8400 Sep 10 15:31 libhello.jnilib
6、last, 执行可执行文件

终端执行 : java HelloWorld

结果:

Hello World!