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

C++ 如何使Visual Studio使用本机amd64工具链,c++,visual-studio,compilation,64-bit,C++,Visual Studio,Compilation,64 Bit,如何让Visual Studio 2012使用本机amd64工具链,而不是默认的x86_amd64交叉编译器 我正在构建一个大型库,在执行整个程序优化和链接时代码生成时,它会导致链接器内存不足 我发现两个老帖子(和)问了同样的问题,但还没有答案。Microsoft提供了有关如何指定工具链的文档,但没有在IDE中指定。在启动Visual Studio 2012 IDE之前,需要将环境变量“\u IsNativeEnvironment”设置为“true”: set _IsNativeEnvironm

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

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


我发现两个老帖子(和)问了同样的问题,但还没有答案。Microsoft提供了有关如何指定工具链的文档,但没有在IDE中指定。

在启动Visual Studio 2012 IDE之前,需要将环境变量“\u 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的版本与工具链的版本不匹配,则此技术不起作用。也就是说,如果您使用配置为运行VS2012编译器的VS2013 IDE,那么您就倒霉了。但这种结合并不常见

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


在Visual Studio 2013中,还有另一种强制每个项目使用64位链接器的方法。编辑.vcxproj文件并在
后插入以下内容如果您的目标是使用本机环境,而不是专门使用
amd64_x86
,则可以在项目文件中设置
UseNativeEnvironment
属性:

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

我知道这是一篇相当古老的帖子,但它仍然与VS2017相关。这里还有“PreferredToolArchitecture”环境变量,IDE中的“内置”设置不可用

但是,您可以在一个项目一个项目的基础上轻松地集成它,这样您就可以始终选择要使用的工具体系结构。也许这对一些人有帮助。这样做:

  • 转到“属性管理器”并创建新的属性页,例如。G命名为“x64 Toolchain.props”,所以您知道它的功能。使用单独的属性表,您可以通过在项目中包含或不包含该表来切换工具体系结构
  • 打开新工作表的属性,导航到“公共属性\用户宏”,然后单击“添加宏”
  • 在对话框中,将名称设置为“PreferredToolArchitecture”,将值设置为“x64”,并启用复选框“将此宏设置为生成环境中的环境变量”
  • (可选)导航到“公共属性\C/C++\Command Line”并在“其他选项”下添加“/Bv”。这将使编译器输出它使用的工具,包括它的路径和版本号,可能有助于检查是否真正使用了所需的体系结构。它将在日志输出窗口中放置条目,如下所示: 编译器通过:
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\CL.exe:版本19.15.26730.0
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1.dll:版本19.15.26730.0
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1x.dll:版本19.15.26730.0
    C:\ProgramFiles(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:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\1033\clui.dll:版本19.15.26730.0

  • 现在,对于所有应使用x64工具体系结构构建的项目,请在property manager中将新的属性表包含到项目中。对于那些不应该简单地不包括它的人。就这样

编辑:
不幸的是,这似乎不可靠!见下面的评论。如果MS能将此设置连接到某个GUI元素并使其持续工作,我将不胜感激。

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

但是,如果我在VisualStudio2010命令提示符中设置_IsNativeEnvironment=true,并像之前发布的那样从命令行启动ide,那么错误就会消失。显然,32位GUI IDE环境正在从64位进程接收信息,并期望从32位进程(如x86\cl.exe或x86_64\cl.exe)接收信息

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

IDE应该检测到本机编译器正在本机64位上使用 当从IDE中选择本机编译器时,应自动将此变量设置为适当的值。从未应用过简单的修复程序来修补此问题。解决方案在提示下自己动手,或者从Microsoft购买最新的IDE来解决问题

因此,微软真正的向导是那些主要通过命令行工作的开发人员。其他的开发者,戴着尖尖的帽子,坐在角落里,肯定是从苹果公司雇来的,他们更关心的是外观而不是功能


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

有没有办法强制特定解决方案而不是环境变量实现这一点?如果
<PropertyGroup>
  <UseNativeEnvironment>true</UseNativeEnvironment>
</PropertyGroup>
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