银河麒麟及arm64环境下,离线编译osg3.4.0和osgEarth2.9库文件(Qt可用)

10 篇文章 3 订阅
3 篇文章 0 订阅

银河麒麟及arm64环境下,离线编译osg3.4.0和osgEarth2.9库文件


最近想画个地球,于是就开始折腾osg和osgEarth。

一、重难点:特别注意

直接上干货,希望给大家提个醒,少走弯路。

  1. osg和osgEarth的关系是,osg是一个专门为了三维图像而生的函数库,而osgEarth则是在osg的基础上,更加集中于构建三维下的地球的一个函数库。
  2. osg和osgEarth的版本选择很重要!两者的版本号是有相关性的,所以一定要注意你所下载的osg和osgEarth的版本,是否适配。所谓的适配,意思是,在osgEarth中会调用到一系列的osg的函数,但是这些函数,在最新的osg版本中,可能已经被取消了,或者更名了,都有可能。最新的osg是3.6.5版本,但是并不适用于所有的osgEarth的版本,osgEarth我能找到的最新版本是3.1,试了一下,osgEarth3.1和osg3.6.4版本,是无法成功编译的,当然,不能说是不适配,因为在我试的过程中,可能存在别的问题。但我可以肯定的是,osg3.4.0和osgEarth2.8以及osgEarth2.9版本是适配。
  3. 注意在切换osg版本时,一定要将原版本卸载干净。我在这儿就吃了亏,一开始选用osg3.6.4版本,后来更换为osg3.4.0版本,当时没清理干净,导致在编译osgEarth时,不断报错,提示xxx:未定义的引用,当时很奇怪,这函数明明是源代码自带的代码中的函数,为什么一直报未定义的引用,这个报错,意思是在在头文件声明了,但是cpp中,或者说编译后的库文件中,未定义。后来我查到,库文件的链接,即LINK不对,指向了osg3.6.4版本,就是没删除干净。要删除干净,就需要搞清楚源代码编译究竟生成了什么,放在了哪里。源代码编译的时候,根据个人习惯,一是可以将依赖的库文件编译后放在一个自定义的位置,比如通过再configure后追加参数,./configure --prefix=/home/greatwall/,另一种是放在默认位置,即/usr/local下,这个看个人习惯,各有各的好处,放在自定义的位置,方便卸载,放在默认位置,不用考虑环境变量的问题。源代码编译后的结果无非三种文件,一种是头文件,即函数的声明,默认放在/usr/local/include下,一种的可执行文件,默认放在/usr/local/bin下,一种是库文件,即函数的定义,默认放在/usr/local/lib或者/usr/local/lib64下。因此,知道了有什么东西,放在哪,卸载的时候,即手动去删除,务必删除干净。
  4. 在编译osg代码时,需要指定使用QT5版本,因为现在大部分linux系统下,自带QT4和QT5,所以需要指定位置。在CMakeList.txt文件的IF(OSG_USE_QT AND NOT ANDROID)的前一行,添加SET(DESIRED_QT_VERSION 5)
  5. 在编译osgEarth时,在2.8版本中,如果不指定使用X11版本,会报错,因此,需要修改CMakeList.txt文件,在首行添加,add_definitions(-std=gnu++11)或者add_definitions(-std=c++11)
  6. 在osgEarth编译时,为生成可供Qt使用的库文件,修改CMakeList.txt中如下两处,由OFF改为ON。
    OPTION(OSGEARTH_QT_BUILD "Enable to use Qt (build Qt-dependent libraries, plugins and examples)" ON)
    OPTION(OSGEARTH_QT_BUILD_LEGACY_WIDGETS "Build the legacy Qt widgets" ON)
    
  7. 将bin和lib文件夹写入环境变量。编译osg和osgEarth成功之后,在编译的目录下会出现libbin两个文件夹(inlcude的文件,已经默认放在了/usr/local/include下),将这两个单独放置一个妥善位置,建议同osg的DATA文件放一起,方便管理,而后将lib和bin的目录所在地址,写入/etc/profile,每次修改完这个文件profile后,记得source /etc/profile,使其生效。
    export PATH=${PATH}:/home/greatwall/osg_install/OpenSceneGraph-build/bin
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/greatwall/osg_install/OpenSceneGraph-build/lib
    export OSG_FILE_PATH=/home/greatwall/osg_install/OpenSceneGraph-Data
    

二、库文件依赖的解决

  1. 依赖问题始终是最棘手的问题,为了解决依赖问题,可以根据osg和osgEarth中的CMakeList中的提示,可以获悉需要什么依赖,以及该库的版本号。我在解决依赖问题的时候,将所有能下到的依赖库的源代码下了下来,自行编译,其实本人觉得,直接编译源代码会简单一些,源代码的编译方法其实相对比较简单,大致上就是两个方法去编译,一个就是看见源代码目录下,有configure文件,就使用./configure来编译,生成Makefile文件,第二种方法是看见目录下,有CMakeList.txt文件,就使用cmake CMakeList.txt去生成Makefile,总之,都是为了生成Makefile文件,然后可以进一步makesudo make install
  2. 在处理osg和osgEarth中涉及的依赖时,只编译了部分依赖,其实还有一些依赖未解决,但不影响osg和osgEarth编译的成功,不过不解决,会导致后面部分功能无法使用。
  3. 网上有一个集成依赖库的,OSG配置第三方资源库3rdparty,这个仅适用于windows平台,不适用于linux。
  4. osg和osgEarth所涉及的依赖的库文件,他们之间也存在一些依赖关系,所以编译的顺序应该较为严格执行。以下顺序仅供参考。
    1) 编译 zlib
    2) 编译 png
    3) 编译 curl
    4) 编译 freetype
    5) 编译 gdal(proj->geos->gdal)
    6) 编译 jpeg(nasm->libjpeg)
    7) 编译 tiff
    8) 编译 minizip
    9) 编译 sqlite
    10) 编译 SDL2
    11) 编译 libtool
    12) 编译 googletest
    13) 编译 protobuf
    14) 编译 rocksdb(gflags->rocksdb)
    
  5. 在上述库文件的编译过程中,大部分只需要简单的编译。
    如,有configure文件时候,使用
    ./configure
    make -j8
    sudo make install
    
    有CMakeList.txt时,使用
    cmake CMakeList.txt
    make -j8
    sudo make install
    
    只有下述几个情况比较特殊。
  6. 在用configure生成Makefile文件时,有时候会报错configure:error: cannot guess build type; you must specify one,这时候,只需要在configure后添加参数,指定编译所用的引擎即可。./configure --build=arm-linux
  7. 在编译gflags库,默认只生成静态库,而在编译rocksdb时候,需要调用gflags的动态库,需要动态库才行。解决的方法。在cmake生成Makefile时,启用动态库。cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DINSTALL_HEADERS=ON -DINSTALL_SHARED_LIBS=ON -DINSTALL_STATIC_LIBS=ON
  8. 在编译protobuf库文件时,需要首先运行./autogen.sh而后才会出现configure文件。
  9. 每编译完一个库文件,建议在命令行输入一次sudo ldconfig,更新引用,不然可能会有部分库文件不能马上生效,导致后续相关依赖的库文件编译时报错。
  10. 如若在库文件编译时,自定义目录,建议将所有目录统一,方便写入环境变量,写入环境变量,则需要使用export,写在/etc/profile最后面。

三、测试是否成功

  1. 测试osg,可以在命令行运行osgviewer cow.osg是否显示一头牛,或者osgversion,看是否显示版本号。
  2. 测试osgEarth,可以在命令行运行osgearth_version,看是否显示版本号。

最后是整理好的相关依赖的源代码,下载链接点这儿:osg和osgEarth的依赖.zip

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
使用VS2019编译OSG 3.7.0、OSGEarth 3.3和OSGQt需要按照以下步骤进行操作: 1. 首先,确保你已经安装了Visual Studio 2019。可以从官方网站上下载并按照指南进行安装。 2. 接下来,下载OSG 3.7.0的源代码。可以从OSG的官方网站上找到源代码的下载链接。 3. 在Visual Studio 2019中创建一个新的空白项目。选择合适的项目类型,例如Win32控制台应用程序。 4. 将下载的OSG 3.7.0源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 5. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 6. 添加OSG的头文件目录和文件目录到“附加包含目录”和“附加目录”中。 7. 编译项目,并确保没有错误或警告。 8. 下载OSGEarth 3.3的源代码。可以从OSGEarth的官方网站上找到源代码的下载链接。 9. 将下载的OSGEarth 3.3源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 10. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 11. 添加OSGEarth的头文件目录和文件目录到“附加包含目录”和“附加目录”中。 12. 编译项目,并确保没有错误或警告。 13. 最后,下载OSGQt的源代码。可以从OSGQt的官方网站上找到源代码的下载链接。 14. 将下载的OSGQt源代码解压缩到项目文件夹中。在Visual Studio 2019中添加这些源代码文件到项目中。 15. 打开项目的属性窗口。在“配置属性”部分,选择“所有配置”和“所有平台”,然后选择“C/C++”项。 16. 添加OSGQt的头文件目录和文件目录到“附加包含目录”和“附加目录”中。 17. 编译项目,并确保没有错误或警告。 以上是使用VS2019编译OSG 3.7.0、OSGEarth 3.3和OSGQt的大致步骤。请根据具体环境和需求进行相应的设置和调整。如果出现问题,可以参考相关的文档和论坛进行进一步的解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼月半

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值