【问题标题】:How to build a C++ project from within VS11 using the VS2003 toolset?如何使用 VS2003 工具集在 VS11 中构建 C++ 项目?
【发布时间】:2012-03-25 19:56:31
【问题描述】:

我尝试将 Visual C++ 2005 的(工作)平台工具集的副本添加到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets\v71,替换所有有道理。

但是当我尝试编译我的项目时,输出结果令人失望:

1>  Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80x86
1>  Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
1>  
1>  cl ÿþ/
1>  
1>cl : Command line warning D4024: unrecognized source file type 'ÿþ/', object file assumed
1>  Microsoft (R) Incremental Linker Version 7.10.6030
1>  Copyright (C) Microsoft Corporation.  All rights reserved.
1>  
1>  /out:.exe 
1>   ■/ 
1>LINK : fatal error LNK1181: cannot open input file ' ■/.obj'
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

在我看来像是一个字符集问题,但有没有人让它工作?

【问题讨论】:

  • 只是好奇...您是否启用了增量链接?
  • 您是否确保所有来源对于该版本都是正确的?
  • @Aleks 存在一个针对 vs2003 的解决方案/vcproj 文件,并且可以正常编译。这不是源代码问题,肯定是编译器调用方式隐藏的。
  • 在你的问题中你提到了“Visual C++ 2005”,但在标题中你提到了“Visual C++ 2003”。 (您问题中的版本号也指向 2003 年。)

标签: c++ visual-studio visual-c++ msbuild visual-studio-2003


【解决方案1】:

我想如果你关注this链接,你会找到你正在寻找的答案。

您的 cl.dll 似乎数据不足或版本不正确,因此您可能尚未完全转换工具链。


另一方面,我很好奇你为什么要尝试这个

【讨论】:

  • 看起来在那个链接后面发帖的人也有同样的错误信息......但他不想使用 VC7.1,而我想使用 :-)
  • 我正在维护一个 C++ 类库,它必须使用 2003 年及以后的每个 MSVC 编译器版本来构建。是的,我知道在二进制接口中使用 C++ 是个坏主意,但这不是我可以改变的。每当将新文件添加到项目中时,都必须手动将其添加到所有 4 个(很快将是 5 个)项目文件中。我可以将它减少到 2(因为 2005 到 VS11 工作正常),但我真的很想摆脱 2003 年的项目/解决方案。
  • 除非我遗漏了什么,否则您应该能够拥有一组 C++ 源代码并使用任意数量的不同工具链对其进行编译。这种复杂性可能是因为您必须通过 VS 执行此操作
  • 当然只有一个源代码。但是(当前)有多个项目文件,每个 VS 版本一个。当最新的 VS 版本调用不同的编译器版本时,我不需要不同的项目文件。这适用于除 2003 年之外的所有其他人,因此问题:-)
  • 哦,好吧,我知道你从哪里来了。我相信您已经尝试过,如果可能的话,只使用 VS 2003 创建一个项目并在那里编译它。以防万一 2003 年发生了什么怪事
【解决方案2】:

到底为什么要覆盖文件?它应该就像更改项目中的可执行目录一样简单。每当它寻找 cl.exe/link.exe 时,它​​就会去那里。 ProjectProperties->配置属性->VC++目录。只需创建一堆配置。并针对每个编译器进行调整。它应该工作得很好。 请注意,您可能需要调整源、包含等,但它应该都能正常工作。

【讨论】:

  • 创建平台工具集是更标准的做法。本质上,它也只是更改了 VS 找到工具的目录。正如您在输出日志中看到的那样,启动了正确的编译器,但由于某种原因它不喜欢它的参数。
【解决方案3】:

替换所有有意义的东西

我相信,您错过了一个文件,因此您的 cl.exe 选择了错误 依赖 DLL 的版本。

在我的 Microsoft Visual Studio .NET 2003/Vc7/bin 文件夹中,我看到 以下是编译所需要的文件:

cl.exe    Microsoft C/C++ Compiler Driver
c1.dll    Microsoft Visual C Compiler Front End
c1xx.dll  Microsoft Visual C++ Compiler Front End
c2.dll    Microsoft 80x86 Compiler Back End

还需要其他文件(ml.exe、link.exe、lib.exe、...) 创建一个二进制文件。但目前你的编译失败了。

对于 C++ 项目,您需要版本 13.10.3077.0 中的 c1xx.dll。

顺便说一句:好主意。我也想试一试,当我得到它的时候。 ID 如果您能在此处发布最终解决方案,将不胜感激。

【讨论】:

    猜你喜欢
    • 2020-09-18
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多