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