如何让Visual Studio 2012使用本机amd64工具链,而不是默认的x86_amd64交叉编译器?
我正在构建一个大型库,在进行整个程序优化和链接时代码生成时会导致链接器内存不足。
我发现两个较旧的帖子(here和here)提出了同样的问题,但还没有答案。 Microsoft提供了有关如何指定工具链on the command line的文档,但未在IDE中指定。
答案 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中的“内置”设置不可用。
但是,您可以将其轻松地按项目基础集成到项目中,以便始终可以选择要使用的工具体系结构。也许这对某些人有帮助。这样做:
编译器通行证:
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
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复杂。