如何使Visual Studio使用本机amd64工具链

时间:2013-11-06 19:11:50

标签: c++ visual-studio compilation 64-bit

如何让Visual Studio 2012使用本机amd64工具链,而不是默认的x86_amd64交叉编译器?

我正在构建一个大型库,在进行整个程序优化和链接时代码生成时会导致链接器内存不足。

我发现两个较旧的帖子(herehere)提出了同样的问题,但还没有答案。 Microsoft提供了有关如何指定工具链on the command line的文档,但未在IDE中指定。

5 个答案:

答案 0 :(得分:35)

还有另一种方法可以在Visual Studio 2013的基础上强制使用64位链接器。编辑.vcxproj文件并在<Import...Microsoft.Cpp.Defaults行之后插入以下内容:

  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup>
    <PreferredToolArchitecture>x64</PreferredToolArchitecture>
  </PropertyGroup>

答案 1 :(得分:32)

在启动Visual Studio 2012 IDE之前,需要将环境变量“_IsNativeEnvironment”设置为“true”:

set _IsNativeEnvironment=true
start "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" your_solution.sln

对于Visual Studio 2013,环境变量的名称不同:

set PreferredToolArchitecture=x64
sbm start "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" your_solution.sln

请注意,如果IDE的版本与工具链的版本不匹配,则此技术不起作用。也就是说,如果你使用VS2013 IDE配置运行VS2012编译器,那你就不走运了。但这种组合并不常见。

以下是一些链接以获取更多信息:

difference between VS12 and VS13

how to embed PreferredToolArchitecture into the project in VS13

答案 2 :(得分:8)

如果您的目标是使用原生环境而非专门amd64_x86,则可以在项目文件中设置UseNativeEnvironment属性:

<PropertyGroup>
  <UseNativeEnvironment>true</UseNativeEnvironment>
</PropertyGroup>

(我已成功将其添加到&#34; Globals&#34; PropertyGroup。)

您可以通过添加/Bv编译器选项来检查正在使用的工具链。示例输出如下。请注意,工具链目录显示在bin\之后(在这种情况下为amd64_x86)。

2>ClCompile:
2>  Compiler Passes:
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\CL.exe:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\c1.dll:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\c1xx.dll:      Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\c2.dll:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\link.exe:      Version 12.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\mspdb120.dll:      Version 12.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64_x86\1033\clui.dll: Version 18.00.31101.0

答案 3 :(得分:1)

我知道这是一篇比较老的文章,但它与VS 2017仍然相关。在这里,您还具有“ PreferredToolArchitecture”环境变量,并且IDE中的“内置”设置不可用。

但是,您可以将其轻松地按项目基础集成到项目中,以便始终可以选择要使用的工具体系结构。也许这对某些人有帮助。这样做:

  • 转到“属性管理器”并创建一个新的属性表,例如。 G。名为“ x64 Toolchain.props”,因此您知道它的作用。使用单独的属性表,然后可以通过将表包含或不包含到项目中来适当地切换工具体系结构。
  • 打开该新工作表的属性,导航到“通用属性\用户宏”,然后单击“添加宏”。
  • 在对话框中,将名称设置为“ PreferredToolArchitecture”,将值设置为“ x64”,并启用“在构建环境中将此宏设置为环境变量”复选框。
  • (可选)导航到“通用属性\ C / C ++ \命令行”,然后在“其他选项”下添加“ / Bv”。这将使编译器输出其使用的工具(包括其路径和版本号),可能有助于检查是否确实使用了所需的体系结构。它将条目放置在日志输出窗口中,如下所示:
      

    编译器通行证:
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ CL.exe:版本19.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ c1.dll:版本19.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ c1xx.dll:版本19.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ c2.dll:版本19.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ link.exe:版本14.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x86 \ mspdb140.dll:版本14.15.26730.0
      C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.15.26726 \ bin \ HostX86 \ x64 \ 1033 \ clui.dll:版本19.15.26730.0

  • 现在,对于应该使用x64工具体系结构构建的所有项目,都将新的属性表包括到属性管理器中的项目中。对于那些不应该不包括在内的人。就是这样。

HTH

编辑: 不幸的是,这似乎并不可靠!请参阅以下评论。如果MS将此设置连接到某些GUI元素并使之有效地工作,我将不胜感激。

答案 4 :(得分:0)

我在XP 64 SP2上使用Visual Studio 2010时遇到类似的问题。如果将VC ++可执行目录设置为amd64 bin(本机x64文件夹)作为搜索路径中的第一个目录,则我收到TRK0002错误…无效的句柄值。

但是,如果我在Visual Studio 2010命令提示符中设置_IsNativeEnvironment = true并从命令行发布ide,则该错误消失了。显然,32位GUI IDE环境正在从64位进程接收信息,并且期望从32位进程(例如x86 \ cl.exe或x86_64 \ cl.exe)获得信息。

在您要编译IA64位可执行文件并使用x86_ia64 \ cl.exe编译器的情况下。由于您使用的是32位交叉编译器,并且_IsNativeEnvironment变量设置为true,因此在其窗口控制台中发布消息时,这一定会使IDE烦恼。如果先前已将_IsNativeEnvironment = false设置为true,则将其设置为

IDE应该会发现正在本机64位上使用本机编译器 计算机,并且应该从IDE中选择本机编译器时自动将此变量设置为适当的值。从未应用过简单的修复程序来修补此问题。解。在提示符下自行完成操作,或从Microsoft购买最新的IDE来解决问题。

因此,Microsoft真正的向导是主要通过命令行工作的开发人员。戴上尖顶帽子并坐在角落的其他开发人员一定是从Apple雇用的,他们更关注外观而非功能。

IDE的全部目的是使编码简单,而不是比从命令行使用文本编辑器和Makefile复杂。