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