我该在哪里找到'winmm.lib'文件(我使用的是Visual Studio 2012)?

4
我的操作系统是64位的Windows 7。
我想在C:\Program Files(x86)\Microsoft DirectX SDK(June 2010)\Samples\C++\Direct3D10\Tutorials\Tutorial02中构建DirectX示例,但是构建时出现了致命错误:

LNK1104:“winmm.lib”无法打开文件。

我重新安装了DirectX SDK,但没有改变。我还将路径(包括,库)添加到设置中。

如果我从项目设置中删除“winmm.lib”,则无法打开“comctl32.lib”。这两个库已经存在于属性>链接器>输入中。

如何解决这个问题?


你把路径添加到哪里了?你检查过winmm.lib是否存在于你的硬盘上了吗? - Werner Henze
应该在 C:/windows/system32 中,将此路径添加到您的库路径中。 - j-p
这两个都是Windows SDK库:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib或者附近。 - Roman R.
2
它肯定不会在 C:/winows/system32 中,我根本没有任何一个.lib文件在这个文件夹中。也许你认为是.dll文件。 - drescherjm
LNK1104: 'winmm.lib' 无法打开文件。您是否混合使用了 x86_64 和 x86?请记住,您不能在 32 位应用程序中使用 64 位库,也不能在 64 位应用程序中使用 32 位库。 - drescherjm
@RomanR。没错,SDK应该能解决问题...我已经切换到Linux很长一段时间了;-) - j-p
3个回答

4

只需将以下行放入stdafx.h中:

#pragma comment(lib, "winmm.lib")

当我启动一个使用 winmm.dll 函数的项目时,出现了 "LNK2028 未解析的令牌 (0A00002D) extern C ..." 消息。添加 "#pragma comment ..." 以添加对 winmm.lib 的引用可以解决此问题。 - Kieron Hardy

2

winmm.lib 不是 DirectX SDK 的一部分,但是它是 Windows SDK 的一部分。

最新版本的 Windows SDK 进行了重大改组,但它包括你需要的库。


1
如果您正在尝试使用VS 2012或VS 2013构建任何遗留的DirectX SDK示例,则需要按照MSDN页面底部的说明修改包含/库路径。最重要的更改是您必须颠倒Include/Lib路径的顺序:
对于VS 2010,它是这样的: $(DXSDK_DIR)Include;$(IncludePath) $(DXSDK_DIR)Lib\x86;$(LibraryPath) 或 $(DXSDK_DIR)Lib\x64;$(LibraryPath)
对于VS 2012/2013,它必须是这样的: $(IncludePath);$(DXSDK_DIR)Include $(LibraryPath);$(DXSDK_DIR)Lib\x86 或 $(LibraryPath);$(DXSDK_DIR)Lib\x64
当然,更好的选择是不要花时间学习旧版的Direct3D 10 API,而是使用最新的Direct3D 11 Win32桌面教程,这些教程可以在MSDN Code Gallery上找到。事实上,我已经在那里发布了许多传统的DirectX SDK示例,它们可以在VS 2012/2013 Express for Windows Desktop和VS 2012/2013 Pro+上完美运行,而不需要任何DirectX SDK。

阅读这些博客文章:

DirectX SDK样本目录

DirectX SDK工具目录

没有D3DX的生活

某个年代的DirectX SDKs

并且请查看以下CodePlex项目:

DirectX工具包

DirectX网格

DirectXTex

适用于Direct3D 11的DXUT

Effects 11


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接