繁体   English   中英

无法使用Visual Studio 2015命令行工具编译和链接简单的C ++程序

[英]Unable to compile and link simple C++ program with Visual Studio 2015 command line tools

使用Visual Studio 2015,我无法再使用命令行工具编译和链接简单的C ++程序。

考虑main.cpp:

#include <stdlib.h>
int main() { return 0; }

在以前的版本中(例如Visual Studio 2012),我能够轻松地编译和链接main.cpp:

C:\Users\bkircher\src\test>cl main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
Microsoft (R) Incremental Linker Version 11.00.61030.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:main.exe
main.obj

并做了。

但是,在Visual Studio 2015中,我不再设置正确的CRT包含和库路径:

C:\Users\bkircher\src\test>cl main.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23026 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
main.cpp(1): fatal error C1083: Cannot open include file: 'stdlib.h': No such file or directory

据我所知,Microsoft将C运行时分发为新的Windows操作系统组件Universal CRT。

如介绍通用CRT中所述 ,我应该使用以下MSBuild属性来查找适当的路径

$(UniversalCRT_IncludePath)
$(UniversalCRT_LibraryPath_x64)

尽管如此,我如何获得适当的库并包含除devenv或MSBuild之外的构建系统的路径?

为了它:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set include
INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\10\include\wdf\ucrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um;C:\Program Files (x86)\Windows Kits\10\include\wdf\shared;C:\Program Files (x86)\Windows Kits\10\include\wdf\um;C:\Program Files (x86)\Windows Kits\10\include\wdf\winrt;

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC>set lib
LIB=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\10\lib\wdf\ucrt\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\wdf\um\x64;
LIBPATH=C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\LIB\amd64;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\ATLMFC\LIB\amd64;C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References;C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\1.0.0.0;C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.FoundationContract\1.0.0.0;C:\Program Files (x86)\Windows Kits\10\References\indows.Networking.Connectivity.WwanContract\1.0.0.0;C:\Program Files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs\14.0\References\CommonConfiguration\neutral;

包括环境变量的内容是个好主意。 根据出现的路径,您似乎已安装Windows驱动程序工具包,并且您遇到Connect上报告的问题

根据问题的描述,WDK创建的wdf目录会混淆尝试确定最新SDK版本的批处理文件。 例如,而不是

C:\Program Files (x86)\Windows Kits\10\include\wdf\ucrt

INCLUDE变量中,你应该有类似的东西

C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt

“地毯式轰炸”解决方案:卸载WDK,确保wdf目录消失,事情应该恢复正常。


如果这不是一个选项,这是一个“外科”解决方案:你需要编辑

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vcvarsqueryregistry.bat"

(当然首先备份)

1.查找以下两个标签:

:GetWindowsSdkDirHelper32
:GetWindowsSdkDirHelper64

在每个下面,您将找到以下行:

@REM Get windows 10 sdk version number
@if not "%WindowsSdkDir%"=="" @FOR /F "delims=" %%i IN ('dir "%WindowsSdkDir%include\" /b /ad-h /on') DO @set WindowsSDKVersion=%%i\

将其更改为:

@REM Get windows 10 sdk version number
@if not "%WindowsSdkDir%"=="" @FOR /F "delims=" %%i IN ('dir "%WindowsSdkDir%include\" /b /ad-h /on') DO (
   @if not "%%i"=="wdf" (
      @set WindowsSDKVersion=%%i\
   )
)

2.查找以下两个标签:

:GetUniversalCRTSdkDirHelper32
:GetUniversalCRTSdkDirHelper64

在每个下面,更改以下行:

@FOR /F "delims=" %%i IN ('dir "%UniversalCRTSdkDir%include\" /b /ad-h /on') DO @SET UCRTVersion=%%i

至:

@FOR /F "delims=" %%i IN ('dir "%UniversalCRTSdkDir%include\" /b /ad-h /on') DO (
   @if not "%%i"=="wdf" (
      @SET UCRTVersion=%%i
   )
)

而已。 如果有帮助,请告诉我。

请记住,这将完全跳过wdf目录。 如果WDK命令提示符设置脚本碰巧使用相同的vcvarsqueryregistry.bat批处理文件(我怀疑它,但是......),那么它们将不再正常工作; 在这种情况下,需要更多的黑客攻击来为每个构建环境选择合适的批处理文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM