JAVA进阶day07JNI(java调用c)B部分
生活随笔
收集整理的這篇文章主要介紹了
JAVA进阶day07JNI(java调用c)B部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本博文要做兩件事
1:怎樣將c文件編譯成lib*.so
2:java同c語言文件如何傳遞返回數據類型
現在開始搞起:
- 1:怎樣將c文件編譯成lib*.so
Linux下編譯共享庫時,必須加上-fPIC參數,否則在鏈接時會有錯誤提示。故而我們的編譯就變成了
但是呢有提示說找不到jni.h 的路徑,那么咱們給gcc編譯制定路徑唄
gcc -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ -fPIC -shared -o libnative.so native.c呶完美。我們有了c語言的動態庫。我們運行java JNIDemo的時候仍舊報錯。no native in java.library.path這是因為我們沒有給制定庫的路徑。
export LD_LIBRARY_PATH=.加上這一個就可以了。
OK解決掉第一個見過就會,看過就忘的知識點。下面開始真正惡心人的地方。
- 2 java同c語言文件如何傳遞返回數據類型
從實用的角度,我準備在這部分投機取巧。我就記住傳遞字符串,傳遞數組,傳遞基本類型數據。這三類。然后用到了我就來這兒扒代碼。本著這個思想幸福的貼代碼吧!!
貼關鍵部分。
2. 傳遞為字符串
3.傳遞的數組類型
jint c_hello(JNIEnv *env, jobject cls, jintArray arr) {jint *carr;jint i, sum = 0;carr = (*env)->GetIntArrayElements(env, arr, NULL);if (carr == NULL) {return 0; /* exception occurred */}for (i=0; i< (*env)->GetArrayLength(env, arr); i++) {sum += carr[i];}(*env)->ReleaseIntArrayElements(env, arr, carr, 0);return sum; }static const JNINativeMethod methods[] = {{"hello", "([I)I", (void *)c_hello}, };闊以了,萬事大吉。
接下來的博客安排,先不去寫異常 還有 c調用java部分。我記不住,什么時候用到的時候我再補充這個系列。接下來進行反射和內部類的知識補充。
總結
以上是生活随笔為你收集整理的JAVA进阶day07JNI(java调用c)B部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CDMA2000中的Walsh码,PN码
- 下一篇: C语言——计算完数