
最近在忙項目實在是好久沒寫博客啦項目主要是做android的一些移植工作之前對android開發(fā)并無感也就沒怎么涉及通過這陣子的接觸還是遇到不少的坑下面就開一篇新的博客作為對這個項目的一個收獲吧。有些并不是原創(chuàng)都是看了好多人的博客有時候看太多了就不記得是誰的方法了如果需備注請私聊LZ1. could not load library libopencv_java.so這是跑利用opencv的c代碼在jni上交叉編譯時出的錯交叉編譯實在是個神坑心理不強大者切莫入坑錯誤有的實在千奇百怪。而且LZ對eclipse并沒有接觸很多Javaandroid對LZ也都是新的挑戰(zhàn)誒扯遠(yuǎn)了快回來O(∩_∩)O哈哈~解決利用NDK開發(fā)android版本的opencv應(yīng)用dlopen failed: could not load library libopencv_java.so在android opencv開發(fā)時,總是遇到 NDK編譯后的JNI的xxx.so模塊需要libopencv_java.so但是無法加載libopencv_java.so文件.解決方法是編輯Android.mk文件,在其中添加OPENCV_INSTALL_MODULES:on這樣編譯的lib時候會自動加載libopencv_java.so文件到libs文件夾下.問題解決!2.cbuf env-GetIntArrayElements(buf, false)cbuf env-GetIntArrayElements(buf, false); 編譯不過這個應(yīng)該是NDK版本的問題其實LZ也沒有仔細(xì)去查資料到底是什么問題總之把問題解決了就可以了我在重新配置的時候也遇到了這個問題無非就是傳入的參數(shù)和函數(shù)可以接收的參數(shù)不匹配那么給它傳一個匹配的就好了?,F(xiàn)在改成了cbuf env-GetIntArrayElements(buf, NULL)或者cbuf env-GetIntArrayElements(buf, 0);這樣就可以編譯通過了3,作為過來人的建議慎重直接拿別人封裝好的project直接使用因為別人的project大多數(shù)都是編譯好.so文件的如果要自己在別人代碼上進(jìn)行一部分的修改那么還是最好自己新建一個工程哪怕再把源碼復(fù)試過去不然之前的代碼的各種路徑設(shè)置報錯會很崩潰對于LZ這中android小白簡直會欲哭無淚。4.jni/G2OBA.cpp:3:20: fatal error: iostream: No such file or directory #include這個應(yīng)該是做NDK開發(fā)經(jīng)常出現(xiàn)的一個問題了就是在javah之后生成對應(yīng)的頭文件后jni中生成的頭文件不認(rèn)jni.h或者不認(rèn)一些c的問題解決方案是在Application.mk文件中添加以下語句APP_STL:gnustl_staticsystem - 使用默認(rèn)最小的C運行庫這樣生成的應(yīng)用體積小內(nèi)存占用小但部分功能將無法支持stlport_static - 使用STLport作為靜態(tài)庫這項是Android開發(fā)網(wǎng)極力推薦的stlport_shared - STLport 作為動態(tài)庫這個可能產(chǎn)生兼容性和部分低版本的android固件目前不推薦使用。gnustl_static - 使用 GNU libstdc 作為靜態(tài)庫默認(rèn)情況下STLPORT是不支持C異常處理和RTTI所以不要出現(xiàn) -fexceptions 或 -frtti 如果真的需要可以使用gnustl_static來支持標(biāo)準(zhǔn)C的特性但生成的文件體積會偏大運行效率會低一些。支持C異常處理在Application.mk中加入 LOCAL_CPPFLAGS -fexceptions這句同理支持RTTI則加入LOCAL_CPPFLAGS -frtti這里再次提醒大家第二條說的使用gnustl靜態(tài)庫而不是stlport。強制重新編譯 STLPort 在Application.mk中加入 STLPORT_FORCE_REBUILD : true 可以強制重新編譯STLPort源碼由于一些原因可能自己需要修改下STLPort庫一般普通的開發(fā)者無需使用此項5.textview cannot be resolved to a type 解決方法之后看了下配套的代碼,才知道原來發(fā)現(xiàn)缺少了兩個包,于是加上importAndroid.widget.Button;importandroid.widget.TextView;或者importandroid.widget.*;6. Project has no project.properties file! Edit the project properties to set one error7.The project was not built since its build path is incomplete. Cannot find the class file for java.lang.Object.8.Fix the build path then try building this project Unknown Java Problem上面3個錯誤是LZ在調(diào)用自己已經(jīng)配好的project的時候在另外一個workspace下導(dǎo)入工程是報的錯誤其實很尷尬都不曉得為啥不通過后來發(fā)現(xiàn)工程中少了android.jar只要選擇自己合適的開發(fā)平臺把android.jar添加進(jìn)來就好(≧▽≦)/啦啦啦9.error: expected ‘’, ‘,’, ‘;’, ‘a(chǎn)sm’ or ‘a(chǎn)ttribute’ before ‘void’這個報錯也是LZ頭一次見查了快一個半小時解決方案首先LZ這個代碼已經(jīng)在QT上運行通過所以肯定不存在什么代碼的原則性問題最后在一個帖子下面的評論中看到了一個可能結(jié)果一試果然問題解決問題的關(guān)鍵在于在重復(fù)包含了頭文件這在第三方庫使用時特別容易出現(xiàn)這類問題即頭文件重名導(dǎo)致程序無法編譯通過阿西吧LZ的一個半小時啊10 error: undefined reference to ‘calcImgProjFullR’這個錯誤其實都是一個類型的錯誤就是在Android.mk文件中你的source文件少寫了或者就是你的頭文件沒有包含好這個得看具體少哪些回頭加上這些少的源文件或者頭文件就好啦11.Fatal signal 11(SIGSEGV) at 0x50776a97(code 2), thread 17256 (example.test)這是LZ做了一件很愚蠢的事本來想拿文件的指針的結(jié)果取到了文件的值文件有八萬多個點的坐標(biāo)定義的char *,直接超出范圍了。。。最近算法沒怎么看倒是盡做c第三方庫的代碼移植了感覺可以再寫一個關(guān)于c android的移植專題比如說在linux下都特別容易安裝出錯的g2o???等LZ忙過這陣再說。。。