Android Studio利用cmakelists.txt编译OSG的方法总结

参考博文:

使用cmake依赖多个第三方库http://www.jianshu.com/p/5f29fd671750

OSG for Android教程  http://blog.csdn.net/dongzhong1990/article/details/51746758

错误汇总:

1、missing and no known rule to make it

解决方法:添加第三方库有误,第三方库名字可能笔误

2、OSG  cpp文件 undefined reference to XXX

解决方法:缺少添加OSG依赖的库,加上下面的设置

set(LOCAL_LDLIBS  "-llog -lGLESv1_CM -ldl -lz")

3、对第三方库的添加,只能一个个进行add_library,set_target_properties

步骤:

一、建立OSG窗口。在android项目中建立osg窗口的实质就是,通过render调用OSG,在GLSurfaceView上进行渲染。

二、打通JAVA和C之间的屏障。通过JNI来实现。JAVA层主要负责android的整体框架和组件的构建

三、OSG场景建立及渲染。与PC端开发OSG项目基本相同。

 

OSG for Android的demo源码很多,我也是从上面博文里抄过来的,关键难点在于对cmakelist.txt文件的编辑。网上很多少有对cmakelist的讲解,都是用android.mk实现的,所以尝试了很久,才完成对cmakelist的正确的编辑。在增加osg这个第三方静态库时,因为要增加40多个.a,有两种方法:一、add_library         set_target_properties。此方法要一个个增加,非常麻烦

注:第三方库文件名要输入全称。如libosg.a

二、link_directories(路径)   target_link_libraries(osgNativeLib  osgdb_dds ……)    比较简单

注:第三方库不需要输入全称。如osg

第一种方式编辑的cmakelists.txt如下:

cmake_minimum_required(VERSION 3.4.1)
set(libs_DIR ${CMAKE_SOURCE_DIR}/../../../../../../../01Lib)
set(LOCAL_ALLOW_UNDEFINED_SYMBOLS true)
set(LOCAL_LDLIBS "-llog -lGLESv1_CM -ldl -lz")
#设置第三方库
add_library(osgandroid_dds STATIC IMPORTED)
set_target_properties(osgandroid_dds PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_dds.a
)
add_library(osgandroid_ive STATIC IMPORTED)
set_target_properties(osgandroid_ive PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_ive.a
)
add_library(osgandroid_openflight STATIC IMPORTED)
set_target_properties(osgandroid_openflight PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_openflight.a
)
add_library(osgandroid_tga STATIC IMPORTED)
set_target_properties(osgandroid_tga PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_tga.a
)
add_library(osgandroid_rgb STATIC IMPORTED)
set_target_properties(osgandroid_rgb PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_rgb.a
)
add_library(osgandroid_osgterrain STATIC IMPORTED)
set_target_properties(osgandroid_osgterrain PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_osgterrain.a
)
add_library(osgandroid_osg STATIC IMPORTED)
set_target_properties(osgandroid_osg PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_osg.a
)
add_library(osgandroid_osgviewer STATIC IMPORTED)
set_target_properties(osgandroid_osgviewer PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgviewer.a
)
add_library(osgandroid_osgvolume STATIC IMPORTED)
set_target_properties(osgandroid_osgvolume PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgvolume.a
)
add_library(osgandroid_osgtext STATIC IMPORTED)
set_target_properties(osgandroid_osgtext PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgtext.a
)
add_library(osgandroid_11 STATIC IMPORTED)
set_target_properties(osgandroid_11 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgterrain.a
)
add_library(osgandroid_12 STATIC IMPORTED)
set_target_properties(osgandroid_12 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgsim.a
)
add_library(osgandroid_13 STATIC IMPORTED)
set_target_properties(osgandroid_13 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgshadow.a
)
add_library(osgandroid_14 STATIC IMPORTED)
set_target_properties(osgandroid_14 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgparticle.a
)
add_library(osgandroid_15 STATIC IMPORTED)
set_target_properties(osgandroid_15 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osgfx.a
)
add_library(osgandroid_16 STATIC IMPORTED)
set_target_properties(osgandroid_16 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osganimation.a
)
add_library(osgandroid_17 STATIC IMPORTED)
set_target_properties(osgandroid_17 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_deprecated_osg.a
)
add_library(osgandroid_18 STATIC IMPORTED)
set_target_properties(osgandroid_18 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgvolume.a
)
add_library(osgandroid_19 STATIC IMPORTED)
set_target_properties(osgandroid_19 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgtext.a
)
add_library(osgandroid_20 STATIC IMPORTED)
set_target_properties(osgandroid_20 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgterrain.a
)
add_library(osgandroid_21 STATIC IMPORTED)
set_target_properties(osgandroid_21 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgsim.a
)
add_library(osgandroid_22 STATIC IMPORTED)
set_target_properties(osgandroid_22 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgshadow.a
)
add_library(osgandroid_23 STATIC IMPORTED)
set_target_properties(osgandroid_23 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgparticle.a
)
add_library(osgandroid_24 STATIC IMPORTED)
set_target_properties(osgandroid_24 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgmanipulator.a
)
add_library(osgandroid_25 STATIC IMPORTED)
set_target_properties(osgandroid_25 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osgfx.a
)
add_library(osgandroid_26 STATIC IMPORTED)
set_target_properties(osgandroid_26 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osganimation.a
)
add_library(osgandroid_27 STATIC IMPORTED)
set_target_properties(osgandroid_27 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgdb_serializers_osg.a
)
add_library(osgandroid_28 STATIC IMPORTED)
set_target_properties(osgandroid_28 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgViewer.a
)
add_library(osgandroid_29 STATIC IMPORTED)
set_target_properties(osgandroid_29 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgVolume.a
)
add_library(osgandroid_30 STATIC IMPORTED)
set_target_properties(osgandroid_30 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgTerrain.a
)
add_library(osgandroid_31 STATIC IMPORTED)
set_target_properties(osgandroid_31 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgText.a
)
add_library(osgandroid_32 STATIC IMPORTED)
set_target_properties(osgandroid_32 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgShadow.a
)
add_library(osgandroid_33 STATIC IMPORTED)
set_target_properties(osgandroid_33 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgSim.a
)
add_library(osgandroid_34 STATIC IMPORTED)
set_target_properties(osgandroid_34 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgParticle.a
)
add_library(osgandroid_35 STATIC IMPORTED)
set_target_properties(osgandroid_35 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgManipulator.a
)
add_library(osgandroid_36 STATIC IMPORTED)
set_target_properties(osgandroid_36 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgGA.a
)
add_library(osgandroid_37 STATIC IMPORTED)
set_target_properties(osgandroid_37 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgFX.a
)
add_library(osgandroid_38 STATIC IMPORTED)
set_target_properties(osgandroid_38 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgDB.a
)
add_library(osgandroid_39 STATIC IMPORTED)
set_target_properties(osgandroid_39 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgAnimation.a
)
add_library(osgandroid_40 STATIC IMPORTED)
set_target_properties(osgandroid_40 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosgUtil.a
)
add_library(osgandroid_41 STATIC IMPORTED)
set_target_properties(osgandroid_41 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libosg.a
)
add_library(osgandroid_42 STATIC IMPORTED)
set_target_properties(osgandroid_42 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libOpenThreads.a
)
add_library(osgandroid_43 STATIC IMPORTED)
set_target_properties(osgandroid_43 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI}/libgdal.a
)
add_library(osgandroid_44 STATIC IMPORTED)
set_target_properties(osgandroid_44 PROPERTIES IMPORTED_LOCATION
${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/${ANDROID_ABI}/libgnustl_static.a
)

#设置本地库

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
add_library(osgNativeLib SHARED
osgMain.cpp modelUtil.cpp osgNativeLib.cpp)

target_include_directories(osgNativeLib PUBLIC
${libs_DIR}/06OSG-Android-1/include
${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include)
# ${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/${ANDROID_ABI}/include)

include_directories(${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include)
#将NDK库链接到native库中,这样native库才能调用NDK库中的函数
target_link_libraries(osgNativeLib
android
osgandroid_ive
osgandroid_dds
osgandroid_openflight
osgandroid_tga
osgandroid_rgb
osgandroid_osgterrain
osgandroid_osg
osgandroid_osgviewer
osgandroid_osgvolume
osgandroid_osgtext
osgandroid_11
osgandroid_12
osgandroid_13
osgandroid_14
osgandroid_15
osgandroid_16
osgandroid_17
osgandroid_18
osgandroid_19
osgandroid_20
osgandroid_21
osgandroid_22
osgandroid_23
osgandroid_24
osgandroid_25
osgandroid_26
osgandroid_27
osgandroid_28
osgandroid_29
osgandroid_30
osgandroid_31
osgandroid_32
osgandroid_33
osgandroid_34
osgandroid_35
osgandroid_36
osgandroid_37
osgandroid_38
osgandroid_39
osgandroid_40
osgandroid_41
osgandroid_42
osgandroid_43
osgandroid_44
log
GLESv1_CM
dl
z)

第二种方法编辑的cmakelists.txt如下:

cmake_minimum_required(VERSION 3.4.1)
set(libs_DIR ${CMAKE_SOURCE_DIR}/../../../../../../../01Lib)
set(LOCAL_ALLOW_UNDEFINED_SYMBOLS true)
set(LOCAL_LDLIBS "-llog -lGLESv1_CM -ldl -lz")
#设置第三方库
link_directories(${libs_DIR}/06OSG-Android-1/obj/local/${ANDROID_ABI})

#设置本地库

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
add_library(osgNativeLib SHARED
osgMain.cpp modelUtil.cpp osgNativeLib.cpp)

target_include_directories(osgNativeLib PUBLIC
${libs_DIR}/06OSG-Android-1/include
${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include)
# ${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/libs/${ANDROID_ABI}/include)

include_directories(${libs_DIR}/04android-ndk-r9d/sources/cxx-stl/gnu-libstdc++/4.8/include)
#将NDK库链接到native库中,这样native库才能调用NDK库中的函数
target_link_libraries(osgNativeLib
android
osgdb_dds
osgdb_ive
osgdb_openflight
osgdb_tga
osgdb_rgb
osgdb_osgterrain
osgdb_osg
osgdb_deprecated_osgviewer
osgdb_deprecated_osgvolume
osgdb_deprecated_osgtext
osgdb_deprecated_osgterrain
osgdb_deprecated_osgsim
osgdb_deprecated_osgshadow
osgdb_deprecated_osgparticle
osgdb_deprecated_osgfx
osgdb_deprecated_osganimation
osgdb_deprecated_osg
osgdb_serializers_osgvolume
osgdb_serializers_osgtext
osgdb_serializers_osgterrain
osgdb_serializers_osgsim
osgdb_serializers_osgshadow
osgdb_serializers_osgparticle
osgdb_serializers_osgmanipulator
osgdb_serializers_osgfx
osgdb_serializers_osganimation
osgdb_serializers_osg
osgViewer
osgVolume
osgTerrain
osgText
osgShadow
osgSim
osgParticle
osgManipulator
osgGA
osgFX
osgDB
osgAnimation
osgUtil
osg
OpenThreads
gdal
log
GLESv1_CM
dl
z)
原文地址:https://www.cnblogs.com/hanmolabi/p/7801348.html