摘要:在中加載的類庫(kù)注意的動(dòng)態(tài)庫(kù)在上面的命名是文件,而在上面的命名是類庫(kù)的名字需要加上也就是在上面動(dòng)態(tài)庫(kù)的名稱應(yīng)該是生成通過(guò)命令生成文件這樣就可以生成了一個(gè)的文件。在中他所在的位置是使用編譯就可以得到一個(gè)編譯好的文件下面需要把文件打包成動(dòng)態(tài)庫(kù)。
JNI是Java Native Interface的縮寫,是為了在Java上能夠調(diào)用本地語(yǔ)言尤其是C和c++設(shè)計(jì)的。 下面就看下如何在Mac OS上面如何使用JNI的調(diào)用C語(yǔ)言。 ##編寫Java類 先定義一個(gè)Java類
public class MacJni { public native void sayHello(); static { System.loadLibrary("macjni"); } public static void main(String[] args) { MacJni macJni = new MacJni(); macJni.sayHello(); } }
這里定義了一個(gè)MacJni的類,在它的main函數(shù)中調(diào)用了定義的native的方法sayHello。 在static中加載native的類庫(kù)macjni,注意JNI的動(dòng)態(tài)庫(kù)在linux上面的命名是.so文件,而在Mac OS上面的命名是.jnilib,類庫(kù)的名字需要加上lib,也就是在Mac OS上面動(dòng)態(tài)庫(kù)的名稱應(yīng)該是libmacjni.jnilib
生成.class 通過(guò)命令生成.class文件: >javac MacJni.java這樣就可以生成了一個(gè)MacJni.class的文件。 ##生成.h文件 通過(guò)命令可以直接生成.class對(duì)應(yīng).h文件: >javah MacJni
生成了一個(gè)MacJni.h的文件。文件內(nèi)容如下:
* DO NOT EDIT THIS FILE - it is machine generated */ #include/* Header for class MacJni */ #ifndef _Included_MacJni #define _Included_MacJni #ifdef __cplusplus extern "C" { #endif /* * Class: MacJni * Method: sayHello * Signature: ()V */ JNIEXPORT void JNICALL Java_MacJni_sayHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
該文件定義了一個(gè)方法Java_MacJni_sayHello,這個(gè)方法對(duì)應(yīng)定義的native方法public native void sayHello();。 JNI在C語(yǔ)言中定義的規(guī)則是:Java_包名_類名_方法名
編寫.c文件 根據(jù)定義.h方法,需要編寫一個(gè)一個(gè).c文件MacJni.c,用來(lái)實(shí)現(xiàn).h中的方法#include#include "MacJni.h" JNIEXPORT void Java_MacJni_sayHello(JNIEnv * env, jobject obj){ printf("hello from jni"); }
這個(gè)方法很簡(jiǎn)單就是打印一句話:hello from jni。 ##編譯.c 在MacJni.h中有一句話 > #include
jni.h是jdk中C語(yǔ)言庫(kù)的頭文件,在編譯.c的時(shí)候需要指定jni.h的所在。在Mac OX中他所在的位置是:
/System/Library/Frameworks/JavaVM.framework/Headers
使用gcc編譯: > gcc -I/System/Library/Frameworks/JavaVM.framework/Headers -c MacJni.c
就可以得到一個(gè)編譯好的文件MacJni.o,下面需要把.o文件打包成動(dòng)態(tài)庫(kù)。 ##打包動(dòng)態(tài)庫(kù) 使用gcc可以直接打包動(dòng)態(tài)庫(kù) >gcc -dynamiclib -o libmacjni.jnilib MacJni.o
把.o文件打包成了libmacjni.jnilib,就可以通過(guò)Java調(diào)用C語(yǔ)言了。
java MacJni
hello from jni
源碼地址:https://github.com/jjz/jni
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/65605.html
摘要:準(zhǔn)備工作要在中安裝擴(kuò)展,你必須先安裝好,筆者使用的是中文分詞,因此我安裝的是。配置修改文件,將添加到擴(kuò)展選項(xiàng)部分。錯(cuò)誤解決在安裝的過(guò)程中,遇到一個(gè)比較二的錯(cuò)誤??偨Y(jié)在下,很多時(shí)候安裝和搜索依賴庫(kù)的目錄是不一致的,應(yīng)當(dāng)仔細(xì)檢查。 準(zhǔn)備工作 要在PHP中安裝sphinx擴(kuò)展,你必須先安裝好sphinx,筆者使用的是中文分詞,因此我安裝的是coreseek。 如何安裝coreseek請(qǐng)看:h...
閱讀 5291·2021-10-13 09:39
閱讀 2044·2019-08-29 11:12
閱讀 1211·2019-08-28 18:16
閱讀 1932·2019-08-26 12:16
閱讀 1316·2019-08-26 12:13
閱讀 3056·2019-08-26 10:59
閱讀 2397·2019-08-23 18:27
閱讀 3065·2019-08-23 18:02