OpenSceneGraph Android 开发学习 - 编译
2014-07-16 14:26
603 查看
一、编译
1.准备
a)OSG相关库及资源
1)OpenSceneGraph3.2.0:http://www.openscenegraph.org/index.php/download-section/stable-releases
2)3rdPartyDependency:http://www2.ai2.upv.es/difusion/osgAndroid/3rdpartyAndroid.zip
3)DataResouce:http://www.openscenegraph.org/index.php/download-section/data
解压OpenSceneGraph库的压缩包,同时将3rdPartyAndroid.zip解压到OpenSceneGraph的根目录下。
b)安装Cygwin及相关工具
1)下载Cygwin:http://www.cygwin.com/
2)安装相关工具至少包括:cmake,make,gcc-core,gcc-g++
网上有不少人讨论版本问题,个人使用的版本为:cmake2.8.9-2,make4.0-2,gcc-core4.8.3-1,gcc-g++4.8.3-1
c)AndroidNDK开发相关资源
1)NDK:android-ndk-r9dhttps://developer.android.com/tools/sdk/ndk/index.html
2)ADT:adt-bundle-windows-x86_64-20140624http://developer.android.com/sdk/index.html
3)JDK或者JRE
http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html
NDK环境的搭建可以参考http://jingyan.baidu.com/article/5d6edee22d908799eadeec9f.html其中,JRE如果为了方便,可以直接安装在ADT带的Eclipse根目录下。
基本的Android开发环境搭建可以参考
/content/2573656.html
2.编译OpenSceneGraph
本人的OpenSceneGraph目录为E:\Android\OpenSceneGraph-3.2.0,在该目录下新建build文件夹和install文件夹,build文件夹用于存放cmake产生的临时文件,install用于存放编译后得到的include及obj文件。具体编译步骤如下
a)以管理员方式打开Cygwin,进入build目录
cd/cygdrive/e/Android/OpenSceneGraph-3.2.0/build/
其中/cygdrive/是cygwin在windows下模拟的目录。
b)运行cmake
对于OpenGLES1.1
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="armeabiarmeabi-v7a"-DANDROID_PLATFORM=8-DANDROID_STL="gnustl_static"-DANDROID_NDK=/cygdrive/e/Android/android-ndk-r9d-DCMAKE_INSTALL_PREFIX=/cygdrive/e/Android/OpenSceneGraph-3.2.0/install
-DJ=4
对于OpenGLES2.0
cmake..-DOSG_BUILD_PLATFORM_ANDROID=ON-DDYNAMIC_OPENTHREADS=OFF-DDYNAMIC_OPENSCENEGRAPH=OFF-DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF-DOSG_GL_MATRICES_AVAILABLE=OFF-DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF-DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF
-DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF-DOSG_GL1_AVAILABLE=OFF-DOSG_GL2_AVAILABLE=OFF-DOSG_GL3_AVAILABLE=OFF-DOSG_GLES1_AVAILABLE=OFF-DOSG_GLES2_AVAILABLE=ON-DANDROID_ABI="armeabiarmeabi-v7a"-DANDROID_PLATFORM=8-DANDROID_STL="gnustl_static"-DCMAKE_INSTALL_PREFIX=/cygdrive/e/Android/OpenSceneGraph-3.2.0/install_2
-DJ=4
其中,DCMAKE_INSTALL_PREFIX为之前定好的安装目录,DANDROID_NDK为NDK的安装目录,正常cmake过程中,会提示
DANDROID_NDK也可以不使用,替代方案为:
修改cygwin安装目录下/home/Edgar/.bash_profile,在末尾添加如下语句
NDROID_NDK=/cygdrive/E/Android/android-ndk-r9dexportANDROID_NDK
其中,Edgar为个人用户名,/cygdrive/E/Android/android-ndk-r9d为NDK的存放目录,需要根据个人配置修改。
在修改完上述.bash_profile后,需要重启Cygwin上述配置才能生效。
对于GLES1和2的cmake命令区别,可以参考
http://trac.openscenegraph.org/projects/osg//wiki/Community/OpenGL-ES
c)执行make
在执行过程中,会出现错误,认真查看输出信息,可以找到类似下面的提示
E:/Android/OpenSceneGraph-3.2.0/include/OpenThreads/Exports:17:30:fatalerror:E:/Android/OpenSceneGraph-3.2.0/build/include/OpenThreads/Config:Permissiondenied
compilationterminated.
/cygdrive/E/Android/android-ndk-r9d/build/core/build-binary.mk:393:recipefortarget'obj/local/armeabi/objs/osgdb_osc/ReaderWriterOscDevice.o'failed
make[3]:***[obj/local/armeabi/objs/osgdb_osc/ReaderWriterOscDevice.o]Error1
CMakeFiles/ndk.dir/build.make:55:recipefortarget'Android-OpenSceneGraph'failed
make[2]:***[Android-OpenSceneGraph]Error2
CMakeFiles/Makefile2:63:recipefortarget'CMakeFiles/ndk.dir/all'failed
make[1]:***[CMakeFiles/ndk.dir/all]Error2
Makefile:116:recipefortarget'all'failed
make:***[all]Error2
可以看出是Config文件无法访问。查看Config文件的访问权限,竟然连读都不支持,修改/build/include/OpenThreads/Config和/build/include/osg/Config的读写权限,至少支持可读。这个问题不是很确定为什么会发生,可能是Windows下特有的,没有在Linux或者其他系统下测试过。
d)执行makeinstall
执行完成后,在install目录下应该会有includelibobj三个文件夹。
网上有部分人说在install结束后obj文件夹下可能会确实第三方库的*.a文件,如果的确没有,可以从之前下载的3rdParty目录下拷贝过来即可。
整个编译过程可以对比参考:http://blog.csdn.net/xuhaiyan8825/article/details/7847313
3.运行例子
1.准备
a)OSG相关库及资源
1)OpenSceneGraph3.2.0:
2)3rdPartyDependency:
3)DataResouce:
解压OpenSceneGraph库的压缩包,同时将3rdPartyAndroid.zip解压到OpenSceneGraph的根目录下。
b)安装Cygwin及相关工具
1)下载Cygwin:
2)安装相关工具至少包括:cmake,make,gcc-core,gcc-g++
网上有不少人讨论版本问题,个人使用的版本为:cmake2.8.9-2,make4.0-2,gcc-core4.8.3-1,gcc-g++4.8.3-1
c)AndroidNDK开发相关资源
1)NDK:android-ndk-r9d
2)ADT:adt-bundle-windows-x86_64-20140624
3)JDK或者JRE
NDK环境的搭建可以参考
基本的Android开发环境搭建可以参考
2.编译OpenSceneGraph
本人的OpenSceneGraph目录为E:\Android\OpenSceneGraph-3.2.0,在该目录下新建build文件夹和install文件夹,build文件夹用于存放cmake产生的临时文件,install用于存放编译后得到的include及obj文件。具体编译步骤如下
a)以管理员方式打开Cygwin,进入build目录
cd/cygdrive/e/Android/OpenSceneGraph-3.2.0/build/
其中/cygdrive/是cygwin在windows下模拟的目录。
b)运行cmake
对于OpenGLES1.1
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="armeabiarmeabi-v7a"-DANDROID_PLATFORM=8-DANDROID_STL="gnustl_static"-DANDROID_NDK=/cygdrive/e/Android/android-ndk-r9d-DCMAKE_INSTALL_PREFIX=/cygdrive/e/Android/OpenSceneGraph-3.2.0/install
-DJ=4
对于OpenGLES2.0
cmake..-DOSG_BUILD_PLATFORM_ANDROID=ON-DDYNAMIC_OPENTHREADS=OFF-DDYNAMIC_OPENSCENEGRAPH=OFF-DOSG_GL_DISPLAYLISTS_AVAILABLE=OFF-DOSG_GL_MATRICES_AVAILABLE=OFF-DOSG_GL_VERTEX_FUNCS_AVAILABLE=OFF-DOSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE=OFF-DOSG_GL_FIXED_FUNCTION_AVAILABLE=OFF
-DOSG_CPP_EXCEPTIONS_AVAILABLE=OFF-DOSG_GL1_AVAILABLE=OFF-DOSG_GL2_AVAILABLE=OFF-DOSG_GL3_AVAILABLE=OFF-DOSG_GLES1_AVAILABLE=OFF-DOSG_GLES2_AVAILABLE=ON-DANDROID_ABI="armeabiarmeabi-v7a"-DANDROID_PLATFORM=8-DANDROID_STL="gnustl_static"-DCMAKE_INSTALL_PREFIX=/cygdrive/e/Android/OpenSceneGraph-3.2.0/install_2
-DJ=4
其中,DCMAKE_INSTALL_PREFIX为之前定好的安装目录,DANDROID_NDK为NDK的安装目录,正常cmake过程中,会提示
DANDROID_NDK也可以不使用,替代方案为:
修改cygwin安装目录下/home/Edgar/.bash_profile,在末尾添加如下语句
NDROID_NDK=/cygdrive/E/Android/android-ndk-r9dexportANDROID_NDK
其中,Edgar为个人用户名,/cygdrive/E/Android/android-ndk-r9d为NDK的存放目录,需要根据个人配置修改。
在修改完上述.bash_profile后,需要重启Cygwin上述配置才能生效。
对于GLES1和2的cmake命令区别,可以参考
c)执行make
在执行过程中,会出现错误,认真查看输出信息,可以找到类似下面的提示
E:/Android/OpenSceneGraph-3.2.0/include/OpenThreads/Exports:17:30:fatalerror:E:/Android/OpenSceneGraph-3.2.0/build/include/OpenThreads/Config:Permissiondenied
compilationterminated.
/cygdrive/E/Android/android-ndk-r9d/build/core/build-binary.mk:393:recipefortarget'obj/local/armeabi/objs/osgdb_osc/ReaderWriterOscDevice.o'failed
make[3]:***[obj/local/armeabi/objs/osgdb_osc/ReaderWriterOscDevice.o]Error1
CMakeFiles/ndk.dir/build.make:55:recipefortarget'Android-OpenSceneGraph'failed
make[2]:***[Android-OpenSceneGraph]Error2
CMakeFiles/Makefile2:63:recipefortarget'CMakeFiles/ndk.dir/all'failed
make[1]:***[CMakeFiles/ndk.dir/all]Error2
Makefile:116:recipefortarget'all'failed
make:***[all]Error2
可以看出是Config文件无法访问。查看Config文件的访问权限,竟然连读都不支持,修改/build/include/OpenThreads/Config和/build/include/osg/Config的读写权限,至少支持可读。这个问题不是很确定为什么会发生,可能是Windows下特有的,没有在Linux或者其他系统下测试过。
d)执行makeinstall
执行完成后,在install目录下应该会有includelibobj三个文件夹。
网上有部分人说在install结束后obj文件夹下可能会确实第三方库的*.a文件,如果的确没有,可以从之前下载的3rdParty目录下拷贝过来即可。
整个编译过程可以对比参考:
3.运行例子
打开Eclipse,新建Android项目,从已有代码创建,倒入OpenSceneGraphExample目录下的osgAndroidExampleGLES1。网上有人说直接运行就能执行,但是在本机上却有链接错误。类似
error:undefinedreferenceto'virtualthunktostd::basic_istringstream<char,std::char_traits<char>,std::allocator<char>>::~basic_istringstream()'
可以大概看出是标准库的链接错误。具体分析其实是libgnustl_static.a没有找到。修改Android.mk
其中STLLIBDIR为NDK下libgnustl_static.a所在的目录。
在LOCAL_LDFLAGS的末尾添加该文件目录
LOCAL_LDFLAGS+=-L$(LIBDIR)\
-losgdb_dds\
-losgdb_openflight\
….
-lOpenThreads\
$(STLLIBDIR)/libgnustl_static.a
在实际运行过程中,本机上出现了在执行System.loadLibrary("osgNativeLib");后没有返回的情况,需要注释掉OsgMainApp.hpp中的
//USE_SERIALIZER_WRAPPER_LIBRARY(osgParticle)
这样之后即可运行成功。具体原因还未弄清楚,可能跟如下链接讨论的问题有关。
https://code.google.com/p/android/issues/detail?id=43819
具体过程也可以参考:
/article/8733122.html
/article/1841062.html
相关文章推荐
- OpenSceneGraph Android 开发学习-正确加载模型及颜色
- OpenSceneGraph Android 开发学习-学习材料
- Android基于XMPP Smack Openfire下学习开发IM(五)连接断开重连
- 用vc6.0编译OpenSceneGraph第一个程序
- (转)Android开发学习笔记(二)——编译和运行原理(1)
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- OpenSceneGraph 编译 error LNK2019:unresolved external symbol 错误
- OpenSceneGraph 2.9.11和osgEarth 2.0编译成功
- Ubuntu 12.04下编译OpenSceneGraph-3.0.1记录
- OpenSceneGraph2.4编译心得
- [转]vs2005 sp1 编译(OSG)OpenSceneGraph-2.3.7基本过程
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android开发学习笔记(二)——编译和运行原理(1)
- Android开发学习笔记:反编译APK文件
- (转)Android开发学习笔记(二)——编译和运行原理(2)
- OpenSceneGraph配置和编译说明
- 编译OpenSceneGraph
- Windows下编译 OpenSceneGraph(转)
- Android基于XMPP Smack Openfire下学习开发IM(四)单人聊天和多人聊天(发送消息、接收消息)
- Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等