OSG for android的編譯總結
最近對OSG進行了android下的編譯。簡單總結一下:
0.介紹下環境:WIN7 64位 + cygwin32位 + OSG3.2.0
1.首先介紹幾篇博文,參考了不少,但並沒有解決我出現的問題,但是仍有借鑒意義。
http://blog.csdn.net/wonegequ1/article/details/46501397
http://blog.csdn.net/xuhaiyan8825/article/details/7847313
2.OSG版本很重要,上面幾篇博文之所以沒解決我的問題,最後原因竟然是因為我一開始使用的是OSG3.4版本,導致一直出現下面的錯誤:
‘pthread_setconcurrency’在此作用域中尚未聲明 ‘pthread_getconcurrency
上面只出現在了OSG3.4版本中,解決方法還在研究中。換成OSG3.2後,問題就消失。
這裏推薦OSG英文的官網http://www.openscenegraph.org/index.php/documentation/platform-specifics/android。對osg各版本的編譯介紹的比較清楚,其他博文也都是參考官網的。但是筆者按照官網對OSG3.4進行編譯還是有問題,這個後續再研究。
3.cygwin安裝很麻煩。裝過64位的,報下面的錯誤: CMake no longer defines WIN32 on Cygwin! 。有博文說換成32位就沒問題了,結果我換了32位,還是有這個問題。然後我只能忽略了,最後編譯也成功了,所以私人博文不是特別可靠。對於cygwin的安裝推薦博文:http://blog.chinaunix.net/uid-7547035-id-60230.html。勾選devel,全裝吧。然後在實際使用cygwin中還是會報缺少某些包,回過頭重新再search再裝就行了。最後到gta這個包,還是報找不到,這個可以忽略,不影響編譯。
4.後續還會遇到gdal_priv.h: No such file or directory 的錯誤,這邊是在運行cygwin的cmake時,增加對它的路徑的定義:
-DGDAL_DIR=/cygdrive/d/OpenSceneGraph-3.2.0/3rdparty/gdal。然後再進行make時就不會有問題了。
5.一直對cygwin不太理解。現在有了一些體會。cygwin為windows提供了類UNIX的環境。用來搭建c++開發環境GCC。因為安卓操作系統是基於linux的開源系統,而linux是用c語言開發的。安卓本身是用java開發的,並使用JNI調用本地的c語言庫,實現操作系統底層調度。但底層驅動及操作系統內核是使用c語言及匯編開發的。。安卓應用可以使用java開發,也可以使用c++native開發
6. .a文件是linux下的靜態鏈接庫文件 .so是linux下的動態鏈接庫文件
OpenGL ES 1.0 :
cmake .. -DOSG_BUILD_PLATFORM_ANDROID=ON -DDYNAMIC_OPENTHREADS=OFF -DDYNAMIC_OPENSCENEGRAPH=OFF -DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF -DOSG_GL_MATRICES_AVAILABLE=ON -DOSG_GL_VERTEX_FUNCS_AVAILABLE=ON -DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=ON -DOSG_GL_FIXED_FUNCTION_AVAILABLE=ON -DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF -DOSG_GL1_AVAILABLE=OFF -DOSG_GL2_AVAILABLE=OFF -DOSG_GL3_AVAILABLE=OFF -DOSG_GLES1_AVAILABLE=ON -DOSG_GLES2_AVAILABLE=OFF -DANDROID_ABI="armeabi armeabi-v7a" -DANDROID_PLATFORM=8 -DANDROID_STL="gnustl_static" -DANDROID_NDK=/cygdrive/d/01Lib/04android-ndk-r9d -DJ=4 -DCMAKE_INSTALL_PREFIX=/cygdrive/d/OpenSceneGraph-3.2.0/bin -DGDAL_DIR=/cygdrive/d/OpenSceneGraph-3.2.0/3rdparty/gdal/include
OSG for android的編譯總結