OSG3.4.0静态库编译(VS2019)
前言:
2023年2月底工作需要使用osg3.4.0的静态库,搜了网上所有资料发现要么是osg以前版本的静态库编译,要么就是新版本的动态库编译,osg3.0以后静态库编译都没有,现在自己搞过去了,把经验和成果文件都无偿分享给大家啦,饮水思源,和衷共济。
osg静态库编译成果用百度网盘直接下载:
链接:https://pan.baidu.com/s/1vKAyerNSgiMLJHpjePn2Cw
提取码:1234
3rdPary成果
链接:https://pan.baidu.com/s/18y-WyLEKbmQBauzx9QHhbg
提取码:1234
第一步:使用vcpkg下载并编译osg3.4
说明:这里说一下为什么推荐用vcpkg工具下载编译,以前都是自己下载osg第三方依赖库的源代码(osg2.8,osg3.0),每次下载编译都非常痛苦,依赖项特别多,而且有些第三方库还依赖其它库,把这里都理顺编译成静态库基本都要1周左右时间了,而用vcpkg工具我只用了1天就下载并且vcpkg帮我们编译完成了静态库。我数了一下,下载了70多个库,如果我们人工一个个去下载编译,工作量想想都让人抓狂!!!!所以借用vcpkg工具让它自己去搜索下载编译其依赖库十分nice,在这里十分感谢vcpkg工具的提供者,工具改变了一切!!!
具体的过程参看下面的说明:
-------------------------------------------------------------------------------------------------------------------------
尝试用windows提供的pkg工具安装osg3.4.0静态库
vcpkg.exe安装与应用
https://www.cnblogs.com/gispathfinder/p/12221680.html
------------------------------------------------------
vcpkg安装指定版本的库
https://blog.csdn.net/lhkjm/article/details/127596110
osg3.4.0 .tar.gz文件的哈希码:
050424175b671ef23f3d1c1f59c7b5880ea4b8e225ca39e9698f002069af1d07c97472c1bccf5aaf0309faa344a42765292bc0c4af61df94c04480d447fbaff4
-----------------------------------------------------
vcpkg安装静态库/mtd/mt
https://blog.csdn.net/what951006/article/details/115360430
搜索软件包下载输入:
vcpkg search 包名
例如,让我们搜索spdlog库:
vcpkg search spdlog
想为我们想要的平台下载静态库。在本例中,我们将下载x64 Windows平台的spdlog。
为此输入:(vcpkg解压目录下)
.\vcpkg install spdlog:x64-windows-static
------------------------------------------------------
结合以上
修改下面两个文件
portfile.cmake文件中修改OSG版本号为3.4.0,osg3.4.0 .tar.gz文件的SHA512值改为
050424175b671ef23f3d1c1f59c7b5880ea4b8e225ca39e9698f002069af1d07c97472c1bccf5aaf0309faa344a42765292bc0c4af61df94c04480d447fbaff4
vcpkg.json中修改version值为3.4.0
.\vcpkg install osg:x64-windows-static
vcpkg下载所有的包都成功了,编译静态库-失败!!!! 不用着急,只要有了第三方库,我们可以人工编译osg3.4.0!!!
Installing 1/1 osg:x64-windows-static...
Building osg[core,default-features,fontconfig,freetype,nvtt,openexr,plugins]:x64-windows-static...
-- Using cached openscenegraph-OpenSceneGraph-OpenSceneGraph-3.4.0.tar.gz.
-- Extracting source D:/OSG/vcpkg-master/downloads/openscenegraph-OpenSceneGraph-OpenSceneGraph-3.4.0.tar.gz
-- Applying patch link-libraries.patch
CMake Error at scripts/cmake/z_vcpkg_apply_patches.cmake:34 (message):
Applying patch failed: Checking patch CMakeModules/OsgMacroUtils.cmake...
error: while searching for:
MACRO(LINK_WITH_VARIABLES TRGTNAME)
FOREACH(varname ${ARGN})
IF(${varname}_DEBUG)
IF(${varname}_RELEASE)
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}_RELEASE}" debug "${${varname}_DEBUG}")
error: patch failed: CMakeModules/OsgMacroUtils.cmake:37
error: CMakeModules/OsgMacroUtils.cmake: patch does not apply
Call Stack (most recent call first):
scripts/cmake/vcpkg_extract_source_archive.cmake:153 (z_vcpkg_apply_patches)
scripts/cmake/vcpkg_extract_source_archive_ex.cmake:8 (vcpkg_extract_source_archive)
scripts/cmake/vcpkg_from_github.cmake:113 (vcpkg_extract_source_archive_ex)
ports/osg/portfile.cmake:3 (vcpkg_from_github)
scripts/ports.cmake:147 (include)
error: building osg:x64-windows-static failed with: BUILD_FAILED
error: Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
Then check for known issues at:
https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+osg
You can submit a new issue at:
https://github.com/microsoft/vcpkg/issues/new?template=report-package-build-failure.md&title=[osg]+Build+error
Include '[osg] Build error' in your bug report title, the following version information in your bug description, and attach any relevant failure logs from above.
vcpkg-tool version: 2023-01-24-8a88d63f241d391772fbde69af9cab96c3c64c75
vcpkg-scripts version: unknown
第二步:cmake生成osg3.4的vs2019工程
用CMake可视化工具生成osg3.4 Vs2019的工程,这里没有什么难点,注意设置将动态编译选项去除即可。
在osg3.4静态编译目录(我定义的是OSG_STATIC目录)下创建bin、include、lib几个目录,然后根据自己的需要从vcpkg的packages目录中将编译好的库的相应文件拷贝到对应的目录中,方便cmake中指定3rdParty目录。
先点configure按钮,没有问题以后用Generate按钮生成vs2019的工程。
第三步:编译osg3.4静态库
用vs2019打开cmake生成的sln文件,先运行All_Build
再运行INSTALL,就可以在我们上面在cmake中设置的install路径下看到生成的osglib了,我设置的路径是d:\OpenSceneGraph_Static,会生成bin、include和lib三个目录
Lib中的名称都有osg130-,用的时候可以全部去除。
检查一下是否正确,可用其生成的osgstaticviewer.exe程序验证。其路径位置为
将osg数据文件cow.osg文件用鼠标拖入osgstaticviewer.exe,显示出牛。-----ok
osg静态库编译成果用百度网盘直接下载:
链接:https://pan.baidu.com/s/1vKAyerNSgiMLJHpjePn2Cw
提取码:1234
3rdPary成果
链接:https://pan.baidu.com/s/18y-WyLEKbmQBauzx9QHhbg
提取码:1234
遇到的问题
在编译osgstaticviewer.exe时,一开始没有通过,提示了一堆LNK2001错误
后来发现是link里的库不全导致的,看来cmake也不能是完美的,手动加上缺少的库,即可编译通过!!!
D:\OSG_STATIC\3rdParty\x64\lib\freetype.lib
D:\OSG_STATIC\3rdParty\x64\lib\libpng16.lib
D:\OSG_STATIC\3rdParty\x64\lib\brotlidec-static.lib
D:\OSG_STATIC\3rdParty\x64\lib\brotlicommon-static.lib
D:\OSG_STATIC\3rdParty\x64\lib\brotlienc-static.lib
D:\OSG_STATIC\3rdParty\x64\lib\bz2.lib