OSGAudio编译记录

备份工程文件及编译好的lib与dll 由于静态库的编译是失败的, 所以最终需与exe放一起的dll有: alut.dll,openalpp.dll,osgAudio.dll 工作量是两天左右, 需要修改CMake的代码 需修改旧版的OSG代码

流程笔记:

C:/Users/Arcadia/Desktop/osgaudio-master D:/ArcadiaProject/osgAL_CMAKE

报错: OpenAL and associated libraries not found. Consider using FMOD instead, using 0_ENABLE_SUBSYSTEM_FMOD option 加了OpenAL的include目录与lib之后 生成了工程 提示找不到AL/alut.h 目录中搜不到这个文件 ################################################# 下载了freeAlut D:/OSG/freealut-1.1.0 D:/OSG/freealut-1.1.0_VS2017 改了CMake中的报错,把报错语句注释掉, 编译通过 D:\OSG\freealut-1.1.0_VS2017\INSTALL

回到osgAudio工程 CMake界面 OGG 与 VORBIS 库, 找找吧. ################################################# 现在在sstream里出错. 出错,需要这个头文件vorbis/codec.h

下载了libvorbis, 它需要ogg/ogg.h

libogg这个工程, 在VS2017中编译成功 vorbis那边需要libogg_static.lib, 编译一个出来 libogg_static 编译了一个Release x64版本的 在D:\OSG\libogg-1.3.3\win32\VS2015\x64\Release libvorbis这个子项目现在能编译成功了, 同样是Release x64 生成了这么一个东西: libvorbisfile_dynamic.vcxproj -> D:\OSG\libvorbis-1.3.6\win32\VS____\x64\Release\libvorbisfile.dll 看来, 在sstream里的出错,不需要作处理 在osgAudio的CMake中配置 libvorbis.lib 与 libvorbisfile.lib 配置OGG_LIBRARY为 D:\OSG\libogg-1.3.3\win32\VS2015\x64\Release\libogg_static.lib

再生成一次Alut的Release X64版本 D:\OSG\freealut-1.1.0_VS2017\Release\alut_static.lib 又出现了sstream的错误.(编译源文件 C:\Users\Arcadia\Desktop\osgaudio-master\src\openalpp\AudioBase.cpp) ################################################# 新生成了x64项目,把之前的配置项复制过来 在每一项 #include <sstream>上加一行 #include <iostream> 可以编译了 OpenThreads.lib(ot20-OpenThreads.dll) : fatal error LNK1112: 模块计算机类型“x86”与目标计算机类型“x64”冲突 没注意看,配置项中还是2010的库, 应该换成2017的库. 出错, 67个无法解析的外部命令. ( 包括 osg::Drawable::compileGLObjects 这东西, 音频跟OSG绘图有什么关系? )

错误 C2027 使用了未定义类型“std::ios_base” (编译源文件 C:\Users\Arcadia\Desktop\osgaudio-master\src\osgAudio\Version.cpp) osgAudio d:\program files\vs2017\vc\tools\msvc\14.13.26128\include\sstream 486 大osgAudio这个子项目,继续在文件中加 #include <iostream>

出现在fstream中的错误 这个fstream是OSG中的, 且文件中有加载了#include <fstream>

网络上有可行的解决方案, 我之前也是预到过这问题的,不过忘了. https://blog.csdn.net/dancing_night/article/details/53615500 此问题是由于包含目录里的osgDB有自定义的ifstream和ofstream,和std标准库 的冲突导致,造成此错误的原因是cmake配置include目录时,把各个模块(如osg、osgViewer、osgDB…)的目录设置为了分目录。 解决方法很简单,cmake配置时,把每个模块目录路径都设置为osg的root目录则搞定。 搞了我好几小时,真是汗颜啊~~

例如: D:\ArcadiaProject\SVN\TDuViewer_VS2017_x64\TDuSln\Dep\include\osgGA 改成 D:\ArcadiaProject\SVN\TDuViewer_VS2017_x64\TDuSln\Dep\include\

################################################# 因为所在团队用的是静态库, 所以加了一些配置项: C/C++->预处理器->预处理器定义: OSG_LIBRARY_STATIC OT_LIBRARY_STATIC PR_LIBRARY_STATIC example_osgaudio这个子项目, 用的是osg较低版本,3.2版, 代码我改了一下. 可以编译通过了. 运行时要求一些dll freealut 与 libvorbis的dll目录加到系统环境变量, 重启VS2017 因为公司用的库很特殊, 所有模型都打不开. 从example_osgaudio_viewer入手, 改改代码. 配置静态库后, 可以编译通过了 静态库为了能读osg文件 .\example_osgaudio.exe 需要bee.wav 但还是提示IO错误 把osgAudio源码文件夹下 data文件夹下所有音频文件拷过去, 可以用了, 能听到蜜蜂环绕的效果.

###################################################

打算把底层的依赖编译成静态库, 因为DLL太多的话, 以后布属会麻烦, 音频方面也做不到那么细. 1.Alut D:\OSG\freealut-1.1.0_VS2017\Release\alut_static.lib 2.OGG D:\OSG\libogg-1.3.3\win32\VS2015\x64\Release\libogg_static.lib 3.vorbis D:\OSG\libvorbis-1.3.6\win32\VS____\x64\Release\libvorbisfile.lib D:\OSG\libvorbis-1.3.6\win32\VS____\x64\Release\libvorbis.lib 4.OpenAL D:\Program Files (x86)\OpenAL 1.1 SDK\libs\Win64\OpenAL32.lib OpenAL 的话, 不是我这边编译的,是网上下载的一个SDK包, 这个包包括OGG与vorbisfile.dll

osgAudio的子项目:

  1. D:\OSG\OSG_Audio_VS2017_x64_release\bin\Release\openalpp.lib
  2. D:\OSG\OSG_Audio_VS2017_x64_release\bin\Release\osgAudio.dll

最后,还是无法切换为静态库, 会有报错, osgAudio编译不通过.

猜你喜欢

转载自my.oschina.net/u/235558/blog/1817846
今日推荐