linux下java 调用 c jni 实现 HelloWorld

简介: 1)首先写HelloWorld的java类 class HelloWorld { static { System.loadLibrary("HelloWorld"); } private native void print(); public static void main(String[] ar

1)首先写HelloWorld的java类

class HelloWorld {

static {
System.loadLibrary("HelloWorld");
}

private native void print();

public static void main(String[] args) {
new HelloWorld().print();
}
}
2)编译 生成 .h 文件

javac HelloWorld.java
javah -jni HelloWorld
如果找不到类添加参数 -classpath ./
javah -classpath ./ -jni 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: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);

 

 

#ifdef __cplusplus
}
#endif
#endif

 

然后编写 HelloWorld.c 文件

#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

 

 

JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World In C !\n");
return;
}

 

3)编译c文件

gcc -shared -static -lc -I/opt/jdk/jdk1.6.0_21/include -I/opt/jdk/jdk1.6.0_21/include/linux HelloWorld.c -o libHelloWorld.so

其中 libHelloWorld.so 为链接库 前缀一定是lib 而不是 HelloWorld
-I跟单是两个jdk目录下面的头文件位置

4)运行
java HelloWorld
如果找不到类添加参数 -classpath ./
java -classpath ./ HelloWorld

 

 

 

 

目录
相关文章
|
4月前
|
Java Linux Windows
java 图片上绘制文字Graphics2D linux 中文乱码
java 图片上绘制文字Graphics2D linux 中文乱码
|
4月前
|
Java 关系型数据库 Linux
Linux|Java|jar包的解压和重新打包(更新配置)
Linux|Java|jar包的解压和重新打包(更新配置)
67 0
|
2月前
|
Java 关系型数据库 应用服务中间件
阿里云RDS购买Linux完整过程——安装java环境并跑起来tomcat
阿里云RDS购买Linux完整过程——安装java环境并跑起来tomcat
43 0
|
4月前
|
Kubernetes Java Linux
Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路
Linux|操作系统|Error: Could not create the Java Virtual Machine 报错的解决思路
443 0
|
2月前
|
Java Linux
手把手教你Linux系统下的Java环境配置,简单到不行!
手把手教你Linux系统下的Java环境配置,简单到不行!
73 1
|
3月前
|
Linux Windows
FinalShell连接Linux虚拟机报错java.net.ConnectException: Connection timed out: connect(亲测有效)
FinalShell连接Linux虚拟机报错java.net.ConnectException: Connection timed out: connect(亲测有效)
152 0
|
1月前
|
网络协议 Java Linux
Java 开发常用的 Linux 命令知识积累
Java 开发常用的 Linux 命令知识积累
37 0
|
3月前
|
Java Unix Linux
Java大神常用Linux命令整理二
Java大神常用Linux命令整理二
16 0
|
3月前
|
Java Linux 开发工具
Java大神常用Linux命令整理一
Java大神常用Linux命令整理一
16 0
|
4月前
|
Java Linux 微服务
linux中一键杀死springclud等各个java进程
linux中一键杀死springclud等各个java进程