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

2023-11-22

使用 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)进行分发。

如中所述通用 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 上报告的问题.

根据问题描述,wdfWDK 创建的目录会混淆尝试确定可用的最新 SDK 版本的批处理文件。例如,代替

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

in the 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

to:

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

就是这样。让我知道是否有帮助。

请记住,这将跳过wdf总共目录。如果 WDK 命令提示符安装脚本碰巧使用相同的vcvarsqueryregistry.bat批处理文件(我对此表示怀疑,但是......),那么它们将不再正常工作;在这种情况下,需要更多的技巧来为每个构建环境选择正确的批处理文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 为什么在创建矩阵类时使用向量不好?

    对于我的矩阵类 我做了 template
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 在 Xamarin 中隐藏软键盘

    如何隐藏软键盘以便在聚焦时显示Entry在 Xamarin forms 便携式表单项目中 我假设我们必须为此编写特定于平台的渲染器 但以下内容不起作用 我创建自己的条目子类 public class MyExtendedEntry Entr
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 如何分析组合的 python 和 c 代码

    我有一个由多个 python 脚本组成的应用程序 其中一些脚本正在调用 C 代码 该应用程序现在的运行速度比以前慢得多 因此我想对其进行分析以查看问题所在 是否有工具 软件包或只是一种分析此类应用程序的方法 有一个工具可以将 python
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • 使用 UIWebview 的 IP 摄像机流适用于 IOS 5,但不适用于 IOS 6

    您好 我在我的网站上流式传输 ip 摄像机 并将我的网站嵌入到 UIWebview 上 在 IOS 5 上工作正常 但当我在 IOS 6 上打开我的应用程序时 仅显示图像而不是视频 在我的网站上我使用请有人帮助我 还有其他方法吗 如果你想在
  • 如何从 iOS 应用程序打开 VPN? (私有 API 可以)

    不幸的是 当 iOS 设备进入 睡眠模式 时 即使已配置的 VPN 也会被关闭 一位客户想要为他的 iPad 安装应用程序has使用VPN是为了安全 所以任何事情都必须通过VPN来完成 该应用程序必须进行大量同步 但 iOS 设备可能会自行
  • 为静态方法设置 AspectJ 建议

    我用原始的切入点和建议方法编写了简单的方面 Aspect public class MyAspect Pointcut execution static com mtag util SomeUtil someMethod public vo
  • 如何在 Perl、DBI 中显示查询时间?

    我使用 Perl 和 DBI 来管理我的 MySQL 表 查询等 如何显示查询的运行时间 如果我在控制台中执行 SELECT 操作 结果将如下所示 id name 1 Jack 2 Joe 3 Mary 3 rows in set 0 17
  • 设置依赖注入的过滤器属性以接受构造函数中的参数

    我正在遵循 ninject 过滤器属性设置page 对于他们来说 他们有 WithConstructorArgumentFromControllerAttribute
  • Sails.js + socket.io:从服务器向客户端发送消息

    我正在尝试使用 sails js 设置一个系统 让服务器向一组客户端广播消息 基本上 A 组中的客户端向服务器发送 AJAX 请求 服务器处理请求并通过套接字向 B 组的所有客户端发送消息 B组的客户端通过套接字接收消息并显示一些内容 根据
  • 在vbscript中调用C# dll

    我正在尝试从 QTP 调用 C dll 使用 vbscript 我尝试了很多事情但没有成功 视觉工作室2010 创建C 类库 st dll code using System using System Collections Generic
  • Maven Antrun 和依赖项

    请参阅下面的编辑 我不能只使用类路径的原因是因为我需要管理一些非java库 并且我正在编译一个非java项目 我正在尝试在 antrun 调用中使用 Maven 依赖项 遵循 Maven 站点上的文档 http maven apache o
  • 更改html中悬停时的选择列表选项背景颜色[重复]

    这个问题在这里已经有答案了 是否可以更改悬停时选择列表选项的默认背景颜色 HTML
  • SSIS 包中的“每批行”和“最大插入提交大小”是否有任何相关性?

    我有一个 SSIS 包 它将包含 1000 万条记录的 2 5 GB 数据导出到 Sql Server 数据库 该数据库有 10 个分区 包括主文件组 更改默认值之前最大插入提交大小即 2147483647 和每批次行数 使用快速加载选项完
  • C# Linq 列名称作为变量

    我有一个表 我想在其中对变量列进行查询 喜欢 private void query string column string value using var db new myDB var s1 from c in db Component
  • 在 Hive 中连接日期范围内的表

    我需要在employee id上 将tableA连接到tableB 并且表A中的cal date需要在表B的开始日期和结束日期之间 我运行了下面的查询并收到了下面的错误消息 请您帮我纠正和查询 谢谢你的帮助 JOIN date start
  • HTML/CSS 中的进度条

    dd position relative IE is dumb display block float left width 500px height 16px margin 0 0 2px background url white3 gi
  • 使用 Scrapy 使用“加载更多”按钮抓取无限滚动页面

    如何废弃一个无限滚动的网页 其中响应是 html text 而不是 json 我的第一次尝试是使用 Rule 和 LinkExtractor 它为我提供了大约 80 的职位 url class JobsetSpider CrawlSpide
  • 角度路径参数中的正斜杠

    如何设置我的路线 以便我的参数可以采用正斜杠 例如 myapp com file rootfolder subfolder myfile 这不起作用 const SECTION ROUTES Routes path file path co
  • 使用 Node JS 进行 HLS 流式传输

    我正在尝试使用 node js 流式传输 HLS 内容 但不知怎的 它不起作用 如果有人帮助我 那将会有很大的帮助 问题 尝试从 node js 提供 HLS 内容 不是直播 而是一组 ts 文件和 m3u8 播放列表 或者换句话说 VOD
  • 为什么 Createfile() 没有二进制标志

    Windows 编程的一大乐趣就是记住在所有文件打开调用中放入 wb 或 rb 或 ios binary 这样 Windows 就不会愉快地转换所有 0x13 我只需转换一堆很好的标准代码来使用 Createfile 来获取某个标志 我突然
  • Scala 泛型类的条件方法,具有类型参数的限制

    我相信泛型类可能仅在假设其类型参数符合一些附加限制的情况下才使其方法之一可用 例如 现场即兴编写的语法 trait Col T extends Traversable T def sum T lt Int T 0 this 我想我可以使用隐
  • 如何添加 SOAP 安全标头

    我读了很多文章和答案 但我无法解决 我在我的项目中使用 NET Framework 4 0 因此 我首先将 WebService 添加为服务引用 并在 app config 上获取绑定 我将列出我的尝试 尝试 1 我像这样实例化了服务并添加
  • 无法使用 Visual Studio 2015 命令行工具编译和链接简单的 C++ 程序

    使用 Visual Studio 2015 我无法再使用命令行工具编译和链接简单的 C 程序 考虑 main cpp include