我做了一个小游戏,我需要带它去学校进行一些测试。
不幸的是,作为一个学校系统,我需要打包所有尚未安装的 DLL 以便它运行。在计算机上安装任何东西都是不可能的。几天前当我下线时,我注意到由于缺少 d3dx9_43.dll 文件,应用程序无法启动。
我已经静态链接了我使用过的库,并且对为什么不包括在内感到困惑。我引用了我使用的所有 Direct3D 9 库(或者我认为是这样)。
谁能帮我吗?
我正在使用 Visual Studio C++ 2010 并使用 Direct3D 9。
遵守许可的唯一选择是安装可再发行包。
早期版本的 D3DX 确实支持静态链接,但出于安全原因,MS 更改了规则以禁止静态链接。他们希望能够通过 WINdows Update 为这些 DLL 提供服务,而这只有在使用官方可再发行包安装时才有可能。
一种可能的选择是查看是否可以避免链接到 D3DX。可能是您使用的该库的占用空间足够小,您可以绕过它。
它应该通过在应用程序安装程序中包含 DirectX 9.0 Redistributable 包来完成,但是由于您无法安装任何东西,您必须将所有 dll 与您的可执行文件一起发送(这违反 SDK 许可证)或静态链接到 DirectX运行时(这也可能是不允许的)。
静态链接到 DirectX 运行时不是一个好主意,而且并不像看起来那么简单,我什至不确定它是否可能,但你必须拥有实际的静态库(而不是自己实际链接的静态库) dll)。
因此,最简单的解决方案是将所有需要的 DLL 与 exe 一起保存,如果您担心缺少一个依赖项,您可以使用Dependency Walker。请注意,SDK 许可不允许此解决方案,并且不能用于将应用程序实际分发给最终用户。