OSGAudio编译记录

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

备份工程文件及编译好的lib与dll
https://pan.baidu.com/s/1pZU8yknnbVCkQiEjUfooLA
由于静态库的编译是失败的, 所以最终需与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编译不通过.

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看