備份工程文件及編譯好的lib與dll https://pan.baidu.com/s/1pZU8yknnbVCkQiEjUfooLA 因爲靜態庫的編譯是失敗的, 因此最終需與exe放一塊兒的dll有: alut.dll,openalpp.dll,osgAudio.dll 工做量是兩天左右, 須要修改CMake的代碼 需修改舊版的OSG代碼ios
流程筆記:網絡
C:/Users/Arcadia/Desktop/osgaudio-master D:/ArcadiaProject/osgAL_CMAKEide
報錯: OpenAL and associated libraries not found. Consider using FMOD instead, using 0_ENABLE_SUBSYSTEM_FMOD option 加了OpenAL的include目錄與lib以後 生成了工程 提示找不到AL/alut.h 目錄中搜不到這個文件.net
#################################################code
下載了freeAlut D:/OSG/freealut-1.1.0 D:/OSG/freealut-1.1.0_VS2017 改了CMake中的報錯,把報錯語句註釋掉, 編譯經過 D:\OSG\freealut-1.1.0_VS2017\INSTALLblog
回到osgAudio工程 CMake界面 OGG 與 VORBIS 庫, 找找吧.ci
#################################################get
如今在sstream裏出錯. 出錯,須要這個頭文件vorbis/codec.h源碼
下載了libvorbis, 它須要ogg/ogg.hio
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的子項目:
最後,仍是沒法切換爲靜態庫, 會有報錯, osgAudio編譯不經過.