Linux下Java调用C
来源:互联网 发布:软件开发兼职协议 编辑:程序博客网 时间:2024/05/17 22:33
概述
Java要想调用C的程序,就要把C生成的DLL文件给Java调用,也就是要使用Java的本地化方法JNI调用C的DLL文件。Java本地接口JNI(Java Native Interface),设计目的是与C/C++实现本地交互。
实现
1、在Java类中声明native方法,在静态代码块中通过Sytem.loadLibrary("类名")来加载库文件;
2、编译Java类(javac java文件名);
3、生成扩展名为h的头文件(javah -jni java类名);
4、通过C/C++实现本地方法;
5、将本地方法生成动态链接库;
6、Java程序调用动态链接库。
示例
1、声明HelloWorld类,声明本地方法sayHello,加载HelloWorld库文件。
public class HelloWorld
{
static
{
System.loadLibrary("HelloWorld");
}
private native void sayHello();
public static void main(String[] args)
{
new HelloWorld().sayHello();
}
}
2、编译HelloWorld.java
javac HelloWorld.java
3、声称C语言头文件
javah -jni HelloWorld
4、实现本地方法
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_sayHello(JNIEnv * env, jobject obj)
{
printf("Hello World in C!\n");
return;
}
5、声称动态库
find / -name "jni.h"
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/jni.h
find / -name "jni_md.h"
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux/jni_md.h
gcc -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/ -I/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/include/linux -fPIC -shared HelloWorld.c HelloWorld.h -o libHelloWorld.so
6、运行程序调用动态库
java -Djava.library.path=. HelloWorld
- linux下java调用C
- linux下java调用C
- Linux下Java调用C
- java调用c(linux下)
- Java调用C(Linux下实现Java本地方法)
- Java调用C(Linux下实现Java本地方法)
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- linux下java 调用 c jni 实现 HelloWorld
- Linux下用java 调用 C类库实战 视频
- Linux下通过java调用C/C++代码
- Linux下C调用Python
- Mac下java 调用C
- linux java 调用C 库
- linux下java调用浏览器
- JNI(java Native Interface)linux下 java调用本地c函数
- arm-linux下python调用c函数
- 看懂Gradle脚本(3)- Groovy AST转换
- ubuntu常用命令总结
- php 操作 mogodb
- Mysql----查看数据库大小
- springMVC 返回类型选择 以及 SpringMVC中model,modelMap.request,session取值顺序
- Linux下Java调用C
- SQL Profile 总结(一)
- [Python]socket使用
- 浅析count(1) count(*) count(col)的区别和性能
- [iOS翻译]《The Swift Programming Language》系列 集合类型(Collection Types)
- Intent各属性
- Peerless
- 80端口被占用 默默的黑手SKYPE
- 也说一下Oracle CPU Time[转]