gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 18:29:16 24 4
gpt4 key购买 nike

在 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 操作系统组件(通用 CRT)分发。

Introducing the Universal 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 驱动程序工具包并且遇到了这个 issue reported on 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 批处理文件(我对此表示怀疑,但是......),那么它们将无法再正常工作;在这种情况下,需要更多的黑客攻击来为每个构建环境选择合适的批处理文件。

关于c++ - 无法使用 Visual Studio 2015 命令行工具编译和链接简单的 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32885229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com