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)
  • 相关阅读:
    EntityFramework 启用迁移 EnableMigrations 报异常 "No context type was found in the assembly"
    JAVA 访问FTP服务器示例(2)
    NuGet Package Manager 更新错误解决办法
    JAVA 访问FTP服务器示例(1)
    RemoteAttribute 的使用问题
    诡异的 javascript 变量
    javascript apply用法
    Babun 中文乱码
    GSM呼叫过程
    转站博客园
  • 原文地址:https://www.cnblogs.com/hanmolabi/p/7801348.html
Copyright © 2011-2022 走看看