我的MSVC 2015 C ++应用程序项目使用xaudio2.lib
。所以.cvxproj包含一行
<AdditionalDependencies>xaudio2.lib;%(AdditionalDependencies)</AdditionalDependencies>
查看.exe内置版本,我可以找到一行XAudio2_8.dll
。
所以似乎编译器(或链接器)决定只使用2_8版本。
导致我的应用无法在Windows 7计算机上运行的问题,因为此处只安装了较低版本的XAudio2.dll
,但无法找到XAudio2_8.dll
。
那么如何修复/修改我的项目以便生成的.exe可以在Windows 7上运行?例如,如何指定使用XAudio2_7.dll
?
答案 0 :(得分:4)
如果您使用的是Windows 8.0 SDK或Windows 8.1 SDK,则xaudio2.h
标题和xaudio2.lib
都链接到需要Windows 8或更高版本的XAudio 2.8。如果您为Windows 7兼容的exe(即_WIN32_WINNT
或/D _WIN32_WINNT=0x0601
)正确设置了/D _WIN32_WINNT=0x0600
,那么当您构建应用程序时,您会看到构建时间失败,因为XAudio 2.8是Windows Vista或Windows 7不支持:
This version of XAudio2 is available only in Windows 8 or later. Use
the XAudio2 headers and libraries from the DirectX SDK with applications
that target Windows 7 and earlier versions.
如果您使用的是Windows 10 SDK,则xaudio2.h
标头使用XAudio 2.9,如果_WIN32_WINNT
设置为0x0A00
,只有在{10}上链接xaudio2.lib
时才有效。如果使用Windows 10 SDK,您可以将WIN32_WINNT
设置为0x0602
或0x0603
,链接xaudio2_8.lib
,它将再次使用XAudio 2.8。
要支持Windows 7或更早版本,您必须使用legacy DirectX SDK来获取XAudio 2.7标头,并且必须使用legacy DirectSetup软件包部署XAUDIO2_7.DLL
。由于标头与Windows 8.x SDK和Windows 10 SDK冲突,除了需要正确设置项目包含路径之外,实际上最好对旧版Direct SDK标头进行完整路径引用。例如,音频的DirectX Tool Kit在Audio.h
标题中包含以下内容:
#if (_WIN32_WINNT >= 0x0602 /*_WIN32_WINNT_WIN8*/)
#if defined(_MSC_VER) && (_MSC_VER < 1700)
#error DirectX Tool Kit for Audio does not support VS 2010 without the DirectX SDK
#endif
#include <xaudio2.h>
#include <xaudio2fx.h>
#include <x3daudio.h>
#include <xapofx.h>
#pragma comment(lib,"xaudio2.lib")
#else
// Using XAudio 2.7 requires the DirectX SDK
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\comdecl.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xaudio2.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xaudio2fx.h>
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\xapofx.h>
#pragma warning(push)
#pragma warning( disable : 4005 )
#include <C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\x3daudio.h>
#pragma warning(pop)
#pragma comment(lib,"x3daudio.lib")
#pragma comment(lib,"xapofx.lib")
#endif
请参阅Adding the DirectX Tool Kit for Audio,XAudio2 and Windows 8,Known Issues: XAudio 2.7和Using the Windows Headers。