Java如何调⽤C程序,JNI技术
Java如何调⽤C语⾔程序,JNI技术
Java为什么要调⽤C语⾔编写的程序
c语言教学视频推荐>导入zmodeler因为涉及操作系统底层的事件,Java是处理不了的,例如⽤户上传⼀个视频⽂件,需要后台给视频加上⽔印,或者后台分离视频流和⾳频流,这个事Java就做不了,只能交给C语⾔去处理,然后Java调⽤C语⾔的接⼝。
使⽤Java如何去调⽤C语⾔的接⼝呢?
使⽤Java的JNI技术。
具体调⽤步骤
CentOS7环境下
⾸先创建Java⽂件 HelloJni.java ,并创建native⽅法
js字符串转数字apipackage com.hongyu.jni;
public class HelloMyJni{
public native void helloWorld(); // 注意,这个native⽅法就是调⽤C语⾔接⼝⽤的
static{
System.loadLibrary("hello");  // 这⾏是调⽤动态链接库
}
public static void main(String[] args){
new HelloMyJni().helloWorld();
}
}
编译Java⽂件并⽣成java头⽂件
javac -d . HelloJni.java // ⽣成class⽂件
电脑编程入门自学黑客视频
javah -jni com.hongyu.jni.HelloJni // ⽣成java头⽂件 com_hongyu_jni_HelloJni.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hongyu_jni_HelloJni */
#ifndef _Included_com_hongyu_jni_HelloJni经典递归算法
#define _Included_com_hongyu_jni_HelloJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:    com_hongyu_jni_HelloJni
* Method:    helloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_hongyu_jni_HelloJni_helloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
创建C语⾔⽂件,HelloWorld.c
#include "jni.h"
#include "com_hongyu_jni_HelloJni.h"
#include <stdio.h>
#include <stdlib.h>
JNIEXPORT void JNICALL Java_com_hongyu_jni_HelloJni_helloWorld(JNIEnv * env, jobject obj)        {
printf("Hello World!\n");
}
⽣成动态链接库⽂件 libhello.so
#gcc -Wall -fPIC -c HelloWorld.c -I ./ -I $JAVA_HOME/include/linux/ -I $JAVA_HOME/include/
#gcc -Wall -rdynamic -shared -o libhello.so HelloWorld.o
设置动态链接库⽂件的⽬录
打开⽂件
vi ~/.bash_profile
修改⽂件:
export JAVA_HOME=/home/jdk1.8.0_161
export PATH=$JAVA_HOME/bin:$PATH简单的java语言程序设计
export LD_LIBRARY_PATH=/home/lib:$LD_LIBRARY_PATH
刷新⽂件:
source  ~/.bash_profile
把刚才⽣成的so⽂件拷贝到/home/lib下,然后执⾏class⽂件
java com.hongyu.jni.HelloJni
⼤功告成!Java成功调⽤了C语⾔编写的逻辑

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。