1

请任何人告诉我是否可以静态链接所有directx库。
基本上,我可以构建一个可以在任何没有安装 directx redistribu 的 Windows 系统上运行的 exe 吗?

4

2 回答 2

1

如前所述,您不能静态链接“DirectX”库,即 Direct3D、DirectInput、DirectSound 等。也就是说,完全取决于您对“任何 Windows 系统”的定义,您实际上不需要DirectX“Redist”。它不会做你认为它会做的事情。有关此问题的详细讨论,请参见Not So DirectSetup

如果您使用 Direct3D 9 或更高版本、DirectDraw、DirectSound 8、DirectInput 8、DirectShow、DirectMusic、DirectPlay 等,即历史上被称为“DirectX 9.0c”(又名 2004 年夏季版本),这些位始终存在于 Windows从 Windows XP Service Pack 2、Windows Server 2003 Service Pack 1 和 Windows XP x64 Edition 开始。因此,只要您需要这些作为您的最低操作系统(或更高版本),您就不需要任何 DirectX Redist,因为它实际上并没有安装任何这些东西。看看什么是版本号?例如“你必须这么高才能骑这个”检查来保证这一点。支持Windows 2000、Windows 9x、

对于 Direct3D 11,请阅读面向游戏开发人员的 Direct3D 11 部署。Direct3D 11.0 内置在 Windows 8.x 和 Windows 7 中。它位于 Windows Vista Service Pack 2 上,安装了由 Windows Update 推送的 KB 971644,因此它基本上无处不在。

如果您在 DirectX SDK中使用其他内容,则变得模糊不清:

  • D3DX9、D3DX10 和 D3DX11 的所有版本均已弃用(请参阅MSDN)。如果您依赖这些,您仍然需要旧版 DirectSetup。好消息是使用 Direct3D 11,您根本不需要使用它。相反,请参阅Living without D3DX以获取静态链接到的应用程序以及可用共享源的一堆新支持库- 其中包括另一个答案中提到的DirectX Tool Kit 。

  • HLSL 编译器实际上不再存在于 D3DX 中,如果您使用 D3DCompile 的 Windows 8.x SDK 版本,您可以将该 DLL 与您的应用程序并排部署,而无需使用 DirectX Redist。请参阅HLSL、FXC 和 D3DCompile。请注意,此 DLL 仅支持 Windows Vista 或更高版本,因此 Windows XP 上的运行时 HLSL 编译仍需要旧版 DirectX SDK 和 DirectX Redist。如果您预先构建着色器并且不使用效果 (FX) 框架,这不是问题。

  • 如果您使用 XINPUT,则应使用 XINPUT 9.1.0(原始版本),除非您专门使用 XInput 1.3 的耳机音频功能。此版本内置于 Windows Vista 及更高版本中。如果您需要 Windows 8.0 或更高版本,您可以使用 XInput 1.4。请参阅XINPUT 和 Windows 8。请注意,Windows 的服务器版本没有 XInput 9.1.0 或 1.4。

  • 如果您使用的是 XAUDIO2,那么您可以做出选择。如果您需要 Windows 8.0 或更高版本,那么您可以使用 XAudio 2.8,因为它内置在操作系统中。否则,您需要使用 XAudio 2.7,它仍然需要部署旧版 DirectX REDIST。请参阅XAudio2 和 Windows 8

  • 如果您使用 XACT,那么您必须使用旧版 DirectX REDIST,因为这是部署 XACT 引擎的唯一方法。

  • 如果您使用的是用于 .NET 1.1 的旧版 DirectX 托管程序集,出于多种原因,您应该迁移到SlimDXSharpDX 之类的其他东西。请参阅DirectX 和 .NET

如果您正在使用其他“DirectX”的东西,您应该阅读特定年龄的 DirectX SDK 以获得一些指导。简而言之:不要使用Direct3D Retained ModeDirectPlay VoiceDirectX 7/8 Visual Basic 6.0,因为它们不在从 Windows Vista 开始的操作系统中。

于 2014-11-23T23:41:15.187 回答
0

No, the DirectX redist binaries are not available as static libs, though most of the useful functionality is now available as source in the DirectX Tool Kit.

于 2014-11-23T05:44:47.837 回答