最近在编译项目的时候总是报虚拟内存不足(项目中使用了大量的模板)。一般情况下,
vs
会使用32位的编译工具进行编译,用64位的编译工具应该能解决类似的问题。本以为是一件挺简单的事,但是没想到遇到不少坑,本文记录了折腾的过程,希望对有类似需求的小伙伴有所帮助。
尝试1:在
vs
中查找相关设置
在低版本的
vs
中找了很久也没有找到相关选项,看来
vs
只能使用默认的32位编译器进行编译。实在是不太合理啊!不过确实没找到,如果有小伙伴知道怎么设置,欢迎留言告知。
{% note info %}
vs2019(V16.1)
终于添加了相关的设置选项。
{% endnote %}
尝试2:使用
msbuild
我们知道其实
vs
是调用
msbuild
进行编译链接的(
msbuild
会调用
CL.exe
进行编译,调用
link.exe
进行链接)。我们可以直接使用
msbuild
进行生成。
可以通过
msbuild -h
或者
MSBuild command-line reference
来查看
msbuild
的命令行参数。但是,貌似没有哪个参数是告诉我们如何使用64位的编译工具进行编译的。继续搜
官网指南1
在微软官方找到一篇参考文档
How to: Enable a 64-Bit, x64 hosted MSVC toolset on the command line
,根据文档中的的描述,尝试过程如下:
Use-64-bit-hosted-developer-command-prompt
我们发现,编译时使用的是
CL.exe
,链接时使用的是
link.exe
。这两个文件都是子目录
\bin\HostX86\x64
下的。我们看下这两个程序是32位的还是64位的。
check-cl-link-bit
我们发现这个子目录下的
CL.exe
和
link.exe
都是32位的。what??? 这是什么情况?为什么按官方文档进行操作,结果还是使用的32位的。暂时先不追究了
。继续搜
找到了
曹景游关于MSBuild的博客
,根据其中的
msbuild /p:PreferredToolArchitecture=x64
成功调用了64位的
CL.exe
和
link.exe
。
PreferredToolArchitecture
是什么?
官方参考文档
曹景游关于MSBuild的博客
中有一个
微软的官方链接(中文版)
,介绍了一些
msbuild
的内部选项,其中有关于关键字
PreferredToolArchitecture
的介绍。我切换到了英文版并摘录了关于
PreferredToolArchitecture
的介绍。如下:
PreferredToolArchitecture property
The PreferredToolArchitecture property determines whether the 32-bit or 64-bit compiler and tools are used in the build. This property does not affect the output platform architecture or configuration. By default, MSBuild uses the x86 version of the compiler and tools if this property is not set.
For example, set the PreferredToolArchitecture property to x64 to use the 64-bit compiler and tools to build your application:
msbuild myProject.vcxproj /p:PreferredToolArchitecture=x64
{% note info %}
提示:可以把
URL
中关于语言的部分改成其它语言的标识即可切换到对应的语言下。中文对应着
zh-cn
,英文对应着
en-us
。
{% endnote %}
其它相关资料
根据关键字
PreferredToolArchitecture
在
stackoverflow
上搜到了这篇帖子
how-to-make-visual-studio-use-the-native-amd64-toolchain
。里面提到了
vs2019(V16.1)
已经支持设置编译工具了。从另外一个回复中得知,可以使用
/Bv
来查看编译使用的工具的全路径。
vs2019中的
Preferred Build Tool Architecture
设置选项
在工程文件上右键
Property
,
Configuration Properties -> Advanced -> Preferred Build Tool Architecture
,设置为
64-bit(x64)
即可使用64位的编译工具进行编译。如下图。
Linker fatal error: LNK1102: out of memory
how-to-make-visual-studio-use-the-native-amd64-toolchain
How to: Enable a 64-Bit, x64 hosted MSVC toolset on the command line
MSBuild internals for C++ projects
曹景游关于MSBuild的博客