1

我想使用适用于 x86_32 的 Windows SDK 7.1 编译 C++ 项目。我正在使用带有最新更新的干净 Windows XP SP3 x86_32。项目(名称无关紧要)是一个跨平台项目,使用 Makefiles(无 vcxproj/msbuild)构建,仅包含非托管 C++ 代码(无 C# 或其他托管代码)。

我已经安装了 Windows SDK 7.1(它需要 .NET Framework 2.0 来运行安装程序和 .NET Framework 4.0 来安装 C++ 编译器),使用 SDK 中的 SetEnv.cmd 脚本设置编译环境并成功构建项目。

现在我需要使用相同的 Windows SDK 在不同的 Windows 版本(2003、Vista、7、2008)上测试构建。我不想每次需要在干净的操作系统上测试构建时都从 ISO 安装 Windows SDK - 这需要很多时间。相反,我想要一个带有 C++ 编译器的文件夹,我可以将其复制到干净的 Windows 实例,复制旁边的代码源并运行批处理脚本以开始构建。

所以我将所有 Windows SDK 文件复制到另一个文件夹,卸载了 Windows SDK、C++ 编译器和 .NET Framework 2.0。比将 Windows SDK 文件复制回原始文件夹(我可以将它们移动到相应地更改 SetEnv.cmd 脚本的任何位置)。之后构建工作正常。

但是当我卸载 .NET Framework 4.0 时,构建失败link.exe

LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

我想,link.exe使用 .NET Framework 4.0 安装中的一些库或工具,所以我C:\WINDOWS\Microsoft.NET在卸载之前复制了文件夹,然后将其复制回原来的位置。那没有帮助。

我用谷歌搜索LNK1123,唯一的建议是:“安装 VS2010SP1”(我根本不使用)和“重新安装 .NET Framework 4.0”(有效,但这正是我试图避免的事情)。

不同的编译器不是一个选项:在 Windows 上,该项目仅支持来自 VS2010 的编译器(包含在 Windows SDK 7.1 中)。

我很困惑 - link.exeWindows SDK 7.1 中的 x86_32 确实需要.NET Framework 4.0运行时(不是某些库或本机工具)来构建完全本机和非托管C++ 代码(不会以任何方式与 CLR 一起使用) ?

4

1 回答 1

2

解决了这个问题,非托管 dll不需要.NET Framework 4.0 运行时。link.exe要在干净的 Windows XP SP3(那里从未安装过 SDK 和框架)上运行 Windows SDK 7.1 工具链的副本,必须将这些库添加到%PATH%

msvcp100.dll
msvcr100.dll
msvcr100_clr0400.dll
于 2012-11-27T09:12:08.390 回答