JAVA进阶day07JNI(java调用c)B部分
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                JAVA进阶day07JNI(java调用c)B部分
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                本博文要做兩件事 
 1:怎樣將c文件編譯成lib*.so 
 2:java同c語言文件如何傳遞返回數(shù)據(jù)類型
現(xiàn)在開始搞起:
- 1:怎樣將c文件編譯成lib*.so 
 Linux下編譯共享庫時,必須加上-fPIC參數(shù),否則在鏈接時會有錯誤提示。故而我們的編譯就變成了
但是呢有提示說找不到j(luò)ni.h 的路徑,那么咱們給gcc編譯制定路徑唄
gcc -I/usr/lib/jvm/java-1.7.0-openjdk-amd64/include/ -fPIC -shared -o libnative.so native.c呶完美。我們有了c語言的動態(tài)庫。我們運(yùn)行java JNIDemo的時候仍舊報錯。no native in java.library.path這是因?yàn)槲覀儧]有給制定庫的路徑。
export LD_LIBRARY_PATH=.加上這一個就可以了。 
 OK解決掉第一個見過就會,看過就忘的知識點(diǎn)。下面開始真正惡心人的地方。
- 2 java同c語言文件如何傳遞返回數(shù)據(jù)類型
從實(shí)用的角度,我準(zhǔn)備在這部分投機(jī)取巧。我就記住傳遞字符串,傳遞數(shù)組,傳遞基本類型數(shù)據(jù)。這三類。然后用到了我就來這兒扒代碼。本著這個思想幸福的貼代碼吧!!
貼關(guān)鍵部分。 
 2. 傳遞為字符串
3.傳遞的數(shù)組類型
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調(diào)用java部分。我記不住,什么時候用到的時候我再補(bǔ)充這個系列。接下來進(jìn)行反射和內(nèi)部類的知識補(bǔ)充。
總結(jié)
以上是生活随笔為你收集整理的JAVA进阶day07JNI(java调用c)B部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: CDMA2000中的Walsh码,PN码
- 下一篇: SQL Server Managemen
