无法用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:Usersbkirchersrctest>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:Usersbkirchersrctest>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
我知道微软发布C运行时作为一个新的Windows操作系统组件,通用CRT。
如介绍通用CRT中所述,我应该使用以下MSBuild属性来找到适当的路径
$(UniversalCRT_IncludePath)
$(UniversalCRT_LibraryPath_x64)
尽管如此,我如何得到适当的库和包括路径构建系统以外的devdev或MSBuild?
For the sake of it:
C:Program Files (x86)Microsoft Visual Studio 14.0VC>set include
INCLUDE=C:Program Files (x86)Microsoft Visual Studio 14.0VCINCLUDE;C:Program Files (x86)Microsoft Visual Studio 14.0VCATLMFCINCLUDE;C:Program Files (x86)Windows Kits10includewdfucrt;C:Program Files (x86)Windows KitsNETFXSDK4.6includeum;C:Program Files (x86)Windows Kits10includewdfshared;C:Program Files (x86)Windows Kits10includewdfum;C:Program Files (x86)Windows Kits10includewdfwinrt;
C:Program Files (x86)Microsoft Visual Studio 14.0VC>set lib
LIB=C:Program Files (x86)Microsoft Visual Studio 14.0VCLIBamd64;C:Program Files (x86)Microsoft Visual Studio 14.0VCATLMFCLIBamd64;C:Program Files (x86)Windows Kits10libwdfucrtx64;C:Program Files (x86)Windows KitsNETFXSDK4.6libumx64;C:Program Files (x86)Windows Kits10libwdfumx64;
LIBPATH=C:WindowsMicrosoft.NETFramework64v4.0.30319;C:Program Files (x86)Microsoft Visual Studio 14.0VCLIBamd64;C:Program Files (x86)Microsoft Visual Studio 14.0VCATLMFCLIBamd64;C:Program Files (x86)Windows Kits10UnionMetadata;C:Program Files (x86)Windows Kits10References;C:Program Files (x86)Windows Kits10ReferencesWindows.Foundation.UniversalApiContract1.0.0.0;C:Program Files (x86)Windows Kits10ReferencesWindows.Foundation.FoundationContract1.0.0.0;C:Program Files (x86)Windows Kits10Referencesindows.Networking.Connectivity.WwanContract1.0.0.0;C:Program Files (x86)Microsoft SDKsWindows Kits10ExtensionSDKsMicrosoft.VCLibs14.0ReferencesCommonConfigurationneutral;
包含环境变量的内容是个好主意。根据出现在那里的路径,似乎你已经安装了Windows驱动程序工具包,并且你在连接上遇到了这个问题。
根据问题描述,WDK创建的wdf
目录混淆了试图确定可用的最新SDK版本的批处理文件。例如,不用
C:Program Files (x86)Windows Kits10includewdfucrt
在INCLUDE
变量中的,您应该使用类似于
的内容C:Program Files (x86)Windows Kits10include10.0.10150.0ucrt
地毯式轰炸的解决方案:卸载WDK,确保wdf
目录消失,一切应该恢复正常。
如果这不是一个选项,这里有一个"外科手术"的解决方案:你需要编辑
"C:Program Files (x86)Microsoft Visual Studio 14.0Common7Toolsvcvarsqueryregistry.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
批处理文件(我怀疑它,但是…),那么它们将不再正常工作;在这种情况下,要为每个构建环境选择合适的批处理文件,还需要更多的操作。
相关文章:
- 在链接列表中添加字符串的简单方法
- C / C++链接问题与非常简单的设置
- 如何打印简单的链接列表(C )
- 简单线程程序的链接器错误(缺少boost_chrono符号)
- 简单的链接列表删除失败
- 简单派生类上的Linux GCC链接错误
- Alpine Docker容器中的简单OPENCV程序上的链接器错误
- VS2015 中卡萨布兰卡的链接器错误,同时尝试构建一个简单的 HTTP 侦听器
- 如何链接一个简单的libssh程序
- 保证C++库二进制兼容性的简单方法,C链接
- 链接器错误在简单的QT C 应用程序中
- gcc 5.1 中的链接时间优化是否足以放弃内联简单函数
- 链接2019简单类C++的错误
- 链接提升库的简单方法
- XCode链接器错误,简单的C++函数
- 二进制库的C++链接或简单的头包含
- 使用类进行链接时发生简单的C++未定义引用错误
- 我对SDL的简单介绍程序没有构建.为什么我会收到这些链接器错误
- 无法链接简单的DLL解决方案
- 无法用Visual Studio 2015命令行工具编译和链接简单的c++程序