linux下java 调用 c jni 实现 HelloWorld

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

 

 

 

 

时间: 2024-10-25 13:35:26

linux下java 调用 c jni 实现 HelloWorld的相关文章

linux下java调用多行有相互依赖关系的shell命令,如何调用

问题描述 linux下java调用多行有相互依赖关系的shell命令,如何调用 小弟想用java调用用多行有前后依赖关系的shell命令: 例如: 先process=Runtime.getRuntime().exec("mysql");进入mysql命令行 在用java给mysq命令行传mysql脚本,执行脚本命令 麻烦大家回答一下,或者给点建议意见 解决方案 linux下java调用shell和windows下java调用bat 解决方案二: 通过管道重定向来接收和处理命令 解决方案

Linux下Java开发环境搭建以及第一个HelloWorld_java

想在Linux进行JAVA开发吗?环境如何搭建,第一个HelloWorld如何实现,下面马上奉献:1环境搭建     1.1 Java JDK 的安装    Java JDK 是java编译和运行的必要环境,所以首先必须安装这一软件包,方法如下:     1)下载JDK压缩包,注意看好版本是x86还是x64,windows的还是           linux,要搞清楚,我下的是jdk-7u13-linux-i586.tar.gz:    2)解压压缩包,并将解压后的目录放到/usr/lib/j

kafka linux下java客户端的详细编译步骤

问题描述 kafka linux下java客户端的详细编译步骤 求关于kafka在Linux 命令行下的java客户端详细编译步骤,网上直看到些程序代码但是具体编译过程很少

java内存 内存溢出-想问下linux下java应用top出来占用的内存与jmap出来的占用内存为什么不一样?

问题描述 想问下linux下java应用top出来占用的内存与jmap出来的占用内存为什么不一样? 如下图 top出来的占用的要大于jmap或virsualvm里看到的? 解决方案 有些东西是没有被统计,所以导致不一致

linux下 java打成jar包运行,压缩文件失败

问题描述 linux下 java打成jar包运行,压缩文件失败 linux下 java打成jar包运行,压缩文件失败(java程序内有压缩文件处理).但是在linux下,用eclipse执行的话,压缩文件成功.求大神!!!! 解决方案 还是要查看你的具体错误信息,是不是命令路径等没设置跟Eclipse一样

Linux下java环境变量设置的完整步骤

Linux下java环境变量设置的完整步骤: 从java.sun.com上下载JDK的安装文件,一般是jdk1.5.0_10_XXXX.bin的格式. 解开生成JDK目录,这里假设JDK安装在/usr/java/jdk1.5.0_10中: 代码: sudo chmod 755 jdk1.5.0_10_XXXX.bin   sudo ./jdk1.5.0_10_XXXX.bin sudo mkdir /usr/java sudo mv jdk1.5.0_10/ /usr/java 代码: sudo

linux下 java JNI调用C语言动态链接库

今天花了至少3个小时跑这个java调c的动态链接库的Hello,native world的程序.把所有犯的错误和要点总结一下!1 java 中 c语言函数的声明    public native static void greeting(); //就像是接口声明一样,不过有native!2 编译 javac HelloNative.java ,然后使用 javahjavah HelloNative会自动产生c的头文件HelloNative.h3 生成的头文件 的 第一句子为  #include

Ubuntu下Java调用IKAnalyzer中文分词程序失效

庖丁解牛等其它中文分词程序比较后发现,IKAnalyzer的中文分词效果好,程序调用简单.所以采用IKAnalyzer作为我们中文分词的程序. 调用IKAnalyzer来进行中文分词的代码十分简单:  代码如下 复制代码 /** * 传入一个中文语句,返回一个List列表,列表中的每一个元素是一个String类型的分词之后的中文词组 */ public static ArrayList<String> testJe(String testString) throws Exception {  

【请教】关于linux下java项目发布的问题

问题描述 我现在有一个项目在linux下运行,现需要将mysql驱动替换高一点的版本,但是直接替换驱动然后重启似乎无效,有没有人遇到过同样的问题,然后给一些建议,谢谢! 解决方案 解决方案二:有知道的大大请留个脚印,感激不尽