How to make Visual Studio 2012 call the native 64-bit Visual C++ compiler instead of the 32-bit x64 cross-compiler?

廉价感情. 提交于 2019-12-04 13:02:58

问题


Visual Studio 2012 seems to always call the 32-bit version of cl.exe located at %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\x86_amd64) instead of the 64-bit one located at %ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\amd64.

I tried prepending $(VCInstallDir)bin\amd64 to the beginning of the "Executable Directories" list in the VC++ Directories section of the Microsoft.Cpp.x64.user property sheet, but that doesn't work at all -- when I rebuild I get this error:

TRACKER : error TRK0002: Failed to execute command: "
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\CL.exe"
@C:\Users\<my_profile>\AppData\Local\Temp\tmpf3d817cafe064ad28e7dd62b2cb591c3.rsp
". The operation identifier is not valid.

How can I make Visual Studio 2012 use the native 64-bit C++ compiler?


回答1:


This answer is a bit late to the party, but frustratingly there's still no good resource directly available from Microsoft's online documentation. It turns out to be easy, even if not totally convenient.

At the command prompt, type (changing the version of VS to your needs):

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

The clue for this is in the file

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.targets

where it says

<SetEnv Condition="'$(_IsNativeEnvironment)' == 'true'"
        Name ="PATH"
        Value ="$(NativeExecutablePath)"
        Prefix ="false">
  <Output TaskParameter="OutputEnvironmentVariable" PropertyName="Path"/>
</SetEnv>

My project is generated by CMake, so I am usually at the command prompt for a few lines before I can open VS anyway. I have always started my CMake generators after first setting up the MSVC environment, so I honestly don't know if it's required or not, but you can optionally also do (before everything else):

> call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" amd64

and /or

> call "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64\vcvars64.bat"

Here's the link to the original post on MSDN where I finally found the answer.




回答2:


I was converting an old project from Win32 to x64 and came across this problem.
I found two different ways on how to go around this:

Method 1:
i. Got to: Project properties | General | Platform Toolset
ii. Change the value from 'Visual Studio 2012 (v110)' to 'Visual Studio 2012 - Windows XP (v110_xp)'

Mehtod 2:
i. Open configuration file %LOCALAPPDATA%\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props
ii. Inside the <ExecutablePath> property group, I replaced the $(WindowsSDK_ExecutablePath_x64) entry with $(WindowsSDK_ExecutablePath_x86)

After any of these all worked fine.



来源:https://stackoverflow.com/questions/14188380/how-to-make-visual-studio-2012-call-the-native-64-bit-visual-c-compiler-instea

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!