Android-ndk编译osgdb_3ds静态库
?
Android版本的OSG不支持3ds插件(可以查看osg\src\osgPlugins\CmakeLists.txt文件,搜素’android’關(guān)鍵詞,可以搜索到’IF(NOT?ANDROID)??ADD_SUBDIRECTORY(3ds)?ENDIF()’,可見,android下3ds被屏蔽了),也就是使用Android-ndk編譯OSG的時候,不能編譯osgdb_3ds.a插件,那么接下來展示一下手動編譯osgdb_3ds.a的過程,假設(shè)OSG其他庫已經(jīng)編譯完成,庫文件位于c:/cygwin/usr/local/include,頭文件位于c:/cygwin/usr/local/obj/local。
1、去android官網(wǎng)下載一個ADT?Bundle版本的Eclipse,解壓之后,有eclipse和sdk兩個文件夾和一個SDK?Manager.exe,運行它,省去了插件(CDT、AndroidSDK等)配置過程,再下載一個android-NDK,打開eclipse,Window-Preferences,配置一下NDK路徑,如下圖,這樣環(huán)境就搭建好了。
?
2、新建一個android工程,以ndk自帶的例子HelloJni為模板(或者你新建一個空工程,自己添加相關(guān)文件)
?
?
3、去OSG源代碼那里將src\osgPlugins里面的3ds文件夾拷貝到workspace\HelloJni\jni文件夾下,在jni文件夾下新建一個Application.mk文件,文件列表如下(可以刪除hello-jni.c):
?
4、修改jni/Android.mk,修改后內(nèi)容如下:
Android.mk開始:
LOCAL_PATH?:=?$(call?my-dir)
include?$(CLEAR_VARS)
LOCAL_LDLIBS?:=??????-lGLESv1_CM?-ldl
LOCAL_MODULE?:=?????osgdb_3ds
LOCAL_SRC_FILES?:=???3ds/ReaderWriter3DS.cpp?3ds/WriterNodeVisitor.cpp?3ds/WriterCompareTriangle.cpp\
3ds/lib3ds/lib3ds_io.c\
3ds/lib3ds/lib3ds_atmosphere.c\
????3ds/lib3ds/lib3ds_background.c\
????3ds/lib3ds/lib3ds_camera.c\
????3ds/lib3ds/lib3ds_chunk.c\
????3ds/lib3ds/lib3ds_chunktable.c\
????3ds/lib3ds/lib3ds_file.c\
????3ds/lib3ds/lib3ds_light.c\
????3ds/lib3ds/lib3ds_material.c\
????3ds/lib3ds/lib3ds_math.c\
????3ds/lib3ds/lib3ds_matrix.c\
????3ds/lib3ds/lib3ds_mesh.c\
????3ds/lib3ds/lib3ds_node.c\
????3ds/lib3ds/lib3ds_quat.c\
????3ds/lib3ds/lib3ds_shadow.c\
????3ds/lib3ds/lib3ds_track.c\
????3ds/lib3ds/lib3ds_util.c\
????3ds/lib3ds/lib3ds_vector.c\
????3ds/lib3ds/lib3ds_viewport.c
LOCAL_C_INCLUDES?:=??c:/cygwin/usr/local/include?/3ds/lib3ds
include?$(BUILD_STATIC_LIBRARY)#靜態(tài)庫
Android.mk結(jié)束。
?
編譯過程中,lib3ds_io.c文件中會報錯誤,uint_8之類的,添加幾個括號就行了。
?
說明一下LOCAL_C_INCLUDES,c:/cygwin/usr/local/include是make?install命令將OSG源代碼中的頭文件和cmake生成的osg/Config、OpenThreads/Config兩個文件(OSG源代碼經(jīng)過Cmake之后產(chǎn)生的,查看一下就知道,只有OpenThreads和osg兩個文件夾,每個文件夾下只有一個叫Config的文件,這兩個文件必不可少,因為好多OSG源碼中需要包含它們,例如osg/Export頭文件)安裝到c:/cygwin/usr/的。至于如何Cmake,去網(wǎng)上搜索下如何編譯Android版本的OSG,OSG官網(wǎng)就有。
5、修改Application.mk文件內(nèi)容如下:
#ANDROID?APPLICATION?MAKEFILE
APP_BUILD_SCRIPT?:=?$(call?my-dir)/Android.mk
#APP_PROJECT_PATH?:=?$(call?my-dir)
APP_OPTIM?:=?release#發(fā)布版
#APP_OPTIM?:=?debug#調(diào)試版
APP_PLATFORM? :=?android-7#這個版本號應(yīng)該可以改
APP_STL? :=?gnustl_static#使用靜態(tài)庫
APP_CPPFLAGS? :=?-fexceptions?-frtti
APP_ABI? :=?armeabi?#armeabi-v7a
APP_MODULES?????:=?osgdb_3ds
6、使用$ANDROID_NDK/ndk-build命令編譯,ANDROID_NDK?環(huán)境變量指示ndk的路徑,用記事本打開C:\cygwin\home\yourname\.bash_profile文件,yourname是你的電腦名,在末尾加上ANDROID_NDK=/cygdrive/E/Android/android-ndk-r8?export?ANDROID_NDK,如圖
?
先進入hellojni工程目錄,然后運行$ANDROID_NDK/ndk-build
?
?
?
可以到hellojni/obj/local/armeabi下找到libosgdb_3ds.a文件。如果libosgdb_3ds.a已經(jīng)存在,可能ndk不會進行再編譯,刪除obj文件夾再執(zhí)行$ANDROID_NDK/ndk-build即可。
至此,android下的3ds插件就編譯好了,下面看看怎么使用它。
7、使用libosgdb_3ds.a
將libosgdb_3ds.a放到C:\cygwin\usr\local\obj\local\armeabi路徑下。
使用OSG例子osgAndroidExampleGLES1模板,用Eclipse加載它。
A、編輯Android.mk文件
在LOCAL_LDFLAGS中添加-losgdb_3ds
?
B、修改OsgMainApp.hpp
添加USE_OSGPLUGIN(3ds)//3ds,osg使用靜態(tài)庫需要宏定義USE_OSGPLUGIN
C、修改OsgMainApp.cpp
在void?OsgMainApp::initOsgWindow(int?x,int?y,int?width,int?height)函數(shù)中
_root?=?new?osg::Group();
語句之后添加
????osg::Node*?mdl3ds=osgDB::readNodeFile("sdcard/teapot.3DS");
_root->addChild(mdl3ds);
編譯運行即可。
?
轉(zhuǎn)載于:https://www.cnblogs.com/coolbear/archive/2013/05/23/3094349.html
總結(jié)
以上是生活随笔為你收集整理的Android-ndk编译osgdb_3ds静态库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC SERVER 序列号查询
- 下一篇: android sina oauth2.