zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    线性回归与梯度下降法[二]——优化与比较
    matlab基础教程——根据Andrew Ng的machine learning整理
    dapper-dot-net用法及其扩展系列
    线性回归与梯度下降法[一]——原理与实现
    浅析 if __name__ == "__main__":
    Python中集合数据类型之间的'交'、'差'、'并'、'补'的表达方式
    Python中 'is' 跟 '==' 的区别
    Python中的逻辑运算符:'and'与'or'的用法
    Python2跟Python3的区别
    编程语言分类及区别
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7801348.html
Copyright © 2011-2022 走看看