如何在 Visual Studio 2013 中重新编译 .lib

how to recompile a .lib in Visual Studio 2013

我有一个使用 Effects11.lib 和 Effects11d.lib 的项目,但是当我构建我的项目时,我得到了一堆 "error LNK2038: mismatch detected for '__MSC_VER':value '1600' doesn't match value '1800'"。根据我的发现,这表明 .lib 是为与我正在使用的版本不同的 VS 构建的,我需要重新编译它们。问题是我不确定该怎么做。以前从来不需要重新编译库。

要重新编译.lib 文件,您首先必须拥有源代码。然后你打开库项目的vcproject,然后你改变你的设置,然后你就可以重新编译了。我还在网上发现,对于某些类型的 c++,为了使其重新编译,您必须删除库目录中生成的 .o 文件。但是,我不知道这是否适用于您的编译器。我希望这能回答你的问题。

浏览本书的作者网站@http://www.d3dcoder.net/d3d11.htm,看起来 Effects11.lib 是 Ms-Pl 许可的源代码。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff728664(v=vs.85).aspx

然后 link 到

https://fx11.codeplex.com/

可以在

下载该库的源代码

https://fx11.codeplex.com/releases/view/150822

它似乎有可以使用您正在使用的 VS2013 构建的项目文件,因此您应该能够为 vs2013 构建 effects.lib 并继续您的开发。

或者您可以通过他的网页联系作者本人,看看他是否可以为您做这件事,然后 link 考虑到您可能不是唯一遇到此问题的人?

那些静态库是用 VS 2010 构建的,但你使用的是 VS 2013。link 错误告诉你。

这种情况下的解决方法是访问 CodePlex and then build a fresh copy of the Effects 11 with your VS 2013 compiler. Alternatively, you can use the NuGet package fx11_desktop_2013 上的 Effects 11 站点,该站点与为 VS 2013 构建的版本相同。

请注意,当您使用的 VS 2013 包括 Windows 8.1 SDK 和有些过时的 Luna 书籍时,您可能会尝试使用已弃用的 D3DX11 库。您当然可以使用 VS 2013 做到这一点,但您必须对项目 include/lib 路径进行一些调整才能使其正常工作。参见 MSDNCodePlex 或 NuGet 的 Effects 11 库版本完全不依赖于旧版 DirectX SDK。

我也有一些关于那本书的一般注释here

有关 D3DX11 备选方案的完整列表,请参阅 Living without D3DX