日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

JAVA程序通过JNI调用C/C++库

發布時間:2024/4/15 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA程序通过JNI调用C/C++库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java程序如何調用c/c++庫中的函數主要分為三個步驟:

  1. 加載庫文件. System.loadLibrary

  2. 找到函數( java函數<----映射---->c函數 )

  3. 調用函數

在映射中一般分為顯式建立和隱式建立。

顯式建立:

下面舉個例子:

/*filename native.ccommod: gcc -shared -o libnative.so native.c -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include -fPIC */ #include <stdio.h> #include <jni.h> /* /usr/lib/jvm/java-1.7.0-openjdk-amd64/include */int c_hello( JNIEnv *env, jobject cls, jint num ) {printf("hello c/c++ num=%d\r\n",num);return num*2; }/* 2. java <--> C */static const JNINativeMethod methods[] = {{"hello","(I)I",(void *)c_hello}, /* java function 參數 c function*/ };JNIEXPORT jint JNICALLJNI_OnLoad( JavaVM *jvm, void *reserved ) {JNIEnv *env;jclass cls;/* 獲取運行環境 */if((*jvm)->GetEnv(jvm,(void **)&env,JNI_VERSION_1_4))return JNI_ERR;/* 獲取java中的類 */cls = (*env)->FindClass(env,"JNIDemo");if(cls==NULL)return JNI_ERR;/* 函數映射 */if((*env)->RegisterNatives(env, cls, methods,1)<0)return JNI_ERR;return JNI_VERSION_1_4; }

?

java代碼:

/* * filename JNIDemo.java * commod: javac JNIDemo.java * */ public class JNIDemo {static {/* 1. load */System.loadLibrary("native"); /*libnative.so*/}public native static int hello( int num );public static void main( String args[] ){/* 2. java <--> C *//* 3. call */System.out.println( hello(123) );} }

?

?jni中字段描述符:

?

也可以通過java來生成頭文件從而獲取描述符。

先編譯java程序   javac JNIDemo.java

         ? ?javah -jni JNIDemo
將會生成 JNIDemo.h:

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

?

轉載于:https://www.cnblogs.com/ynxf/p/6897462.html

總結

以上是生活随笔為你收集整理的JAVA程序通过JNI调用C/C++库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。