- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在过去,当在 Visual Studio 中开发 Windows 上的 C++ 项目时,您的 Visual Studio 版本将拥有自己版本的 C 和 C++ 库,并且您的项目将引用特定版本的 Windows SDK 以便访问用于访问 Win32 平台的 header 。如果您安装了多个版本的 Windows SDK,则会有一个涉及环境变量的复杂系统,使您能够选择 Visual Studio 默认使用的 Windows SDK 版本。
它不是很好,让它正常工作需要一些挖掘,但它只是工作。
刚刚从 VS2012 升级到 VS2015,在我看来,无论这个系统被替换成什么,要么是彻底坏掉了,要么就是我不理解它。
将包含 conio.h 的简单 VS2012 C++ 控制台应用程序升级到 VS2015 中断,未报告任何错误。为什么? conio.h 不再存在于 Visual Studio C/C++ 库中,而是存在于 Windows Kit 10 中,升级项目不会重新安装所使用的 SDK(如您所料)。
在 VS2015 中创建一个全新的 Hello World C++ 应用程序,C++ 项目包括继承 $(VC_IncludePath) 和 $(WindowsSDK_IncludePath) 的目录。 $(WindowsSDK_IncludePath) 从 C:\Program Files (x86)\Windows Kits\8.1 中提取 header ,而 $(VC_IncludePath) 从 C:\Program Files (x86)\Windows Kits\10 中提取 header 。
<如此简单的项目升级失败,升级没有报错。清理新的控制台项目同时从 2 个不同的 Windows 套件安装中提取 header ,我现在在 C:\Program Files (x86)\Microsoft SDKs 和 C:\Program Files (x86)\Windows Kits 下有 8.1 和 10 的条目。 Windows Kit 8.1 包含 Win32 和 WinRt header ,而 Windows Kit 10 包含 C/C++ header 。
我的安装是否配置错误和损坏,或者这应该是一团糟?
如果这个困惑是它应该的样子,它是如何工作的?我曾尝试在 MSDN 上搜索有关 Windows 工具包的信息,但除了有关 Windows 驱动程序工具包的内容外,一无所获,它曾经是完全不同的东西,但我不知道现在是否仍然如此。
是否有任何我遗漏的文档解释了这个库配置背后的基本原理以及它的用途?
最佳答案
我已经多次遇到这个问题的几个不同变体,解决从 VS2012 升级到 VS2015 的项目的头文件和库依赖项的问题。
Hans 对我的问题的回复确实解决了 header 的问题,但在遇到库依赖项的相同问题后,我有一个可能更简单的解决方案,也适用于失败的库依赖项解析。
在 VS2015 中打开 VS2012 项目时,不会执行自动升级。打开项目属性并将 General -> Platform Toolset 更改为 Visual Studio 2015 (v140) 可能会重现我原始问题中描述的 header 解析错误的变体或不同的库依赖项解析错误。
我发现解决这些问题的最简单方法是打开项目属性并转到 VC++ 目录 -> 包含目录。在您自己添加到项目的任何路径中,您可能会发现 $(VCInstallDir)\include;$(VCInstallDir\atlmfc\include;$(WindowsSDK_IncludePath)
单击路径以显示下拉列表并单击编辑,这将显示一个包含三个部分的对话框,从上到下分别是明确定义的路径、评估的路径和继承的路径。在最底部是一个复选框“从父项或项目默认值继承”,我总是发现它最初是未选中的。
从显式定义的包含路径中删除上述的 $(VCInstallDir)\include;$(VCInstallDir\atlmfc\include;$(WindowsSDK_IncludePath) 条目并选择“从父项或项目默认值继承”设置。这应该可以解决任何问题头文件依赖问题。
如果您还有库引用问题,请对库目录条目执行相同的操作,编辑设置,删除明确的平台条目并选择“从父项或项目默认值继承”。 (即使您没有看到任何链接器错误,这样做也是个好主意,否则您可能最终会在链接到 VS2012 的库时使用 VS2015 的平台工具集编译器选项。
我不知道为什么这对我来说是个问题,因为我没有遇到任何其他人遇到类似的问题,我以前升级 Visual Studio 解决方案时没有遇到问题。
我也没有发现为什么某些版本的 Windows 套件现在包含 Windows 平台 header 或 C++ 库 header ,而以前的 SDK 总是包含平台 header ,而 C++ header 总是部分或 Visual Studio 安装。看起来像这样的更改应该在某处或其他文档中有一个关于它的开发博客。但只要它有效,我就不会太在意。
我希望这对某些人有帮助。
关于c++ - 什么是 Windows 工具包以及它们如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36842484/
我在Windows 10中使用一些简单的Powershell代码遇到了这个奇怪的问题,我认为这可能是我做错了,但我不是Powershell的天才。 我有这个: $ix = [System.Net.Dn
var urlsearch = "http://192.168.10.113:8080/collective-intellegence/StoreClicks?userid=" + userId +
我有一个非常奇怪的问题,过去两天一直让我抓狂。 我有一个我试图控制的串行设备(LS 100 光度计)。使用设置了正确参数的终端(白蚁),我可以发送命令(“MES”),然后是定界符(CR LF),然后我
我目前正试图让无需注册的 COM 使用 Excel 作为客户端,使用 .NET dll 作为服务器。目前,我只是试图让概念验证工作,但遇到了麻烦。 显然,当我使用 Excel 时,我不能简单地使用与可
我开发了简单的 REST API - https://github.com/pavelpetrcz/MandaysFigu - 我的问题是在本地主机上,WildFly 16 服务器的应用程序运行正常。
我遇到了奇怪的情况 - 从 Django shell 创建一些 Mongoengine 对象是成功的,但是从 Django View 创建相同的对象看起来成功,但 MongoDB 中没有出现任何数据。
我是 flask 的新手,只编写了一个相当简单的网络应用程序——没有数据库,只是一个航类搜索 API 的前端。一切正常,但为了提高我的技能,我正在尝试使用应用程序工厂和蓝图重构我的代码。让它与 pus
我的谷歌分析 JavaScript 事件在开发者控制台中运行得很好。 但是当从外部 js 文件包含在页面上时,它们根本不起作用。由于某种原因。 例如; 下面的内容将在包含在控制台中时运行。但当包含在单
这是一本名为“Node.js 8 the Right Way”的书中的任务。你可以在下面看到它: 这是我的解决方案: 'use strict'; const zmq = require('zeromq
我正在阅读文本行,并创建其独特单词的列表(在将它们小写之后)。我可以使它与 flatMap 一起工作,但不能使它与 map 的“子”流一起工作。 flatMap 看起来更简洁和“更好”,但为什么 di
我正在编写一些 PowerShell 脚本来进行一些构建自动化。我发现 here echo $? 根据前面的语句返回真或假。我刚刚发现 echo 是 Write-Output 的别名。 写主机 $?
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我将一个工作 View Controller 类从另一个项目复制到一个新项目中。我无法在新项目中加载 View 。在旧项目中我使用了presentModalViewController。在新版本中,我
我对 javascript 很陌生,所以很难看出我哪里出错了。由于某种原因,我的功能无法正常工作。任何帮助,将不胜感激。我尝试在外部 js 文件、头部/主体中使用它们,但似乎没有任何效果。错误要么出在
我正在尝试学习Flutter中的复选框。 问题是,当我想在Scaffold(body :)中使用复选框时,它正在工作。但我想在不同的地方使用它,例如ListView中的项目。 return Cente
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我有一个组合框,其中包含一个项目,比如“a”。我想调用该组合框的 Action 监听器,仅在手动选择项目“a”完成时才调用。我也尝试过 ItemStateChanged,但它的工作原理与 Action
你能看一下照片吗?现在,一步前我执行了 this.interrupt()。您可以看到 this.isInterrupted() 为 false。我仔细观察——“这个”没有改变。它具有相同的 ID (1
我们当前使用的是 sleuth 2.2.3.RELEASE,我们看不到在 http header 中传递的 userId 字段没有传播。下面是我们的代码。 BaggageField REQUEST_I
我正在尝试在我的网站上设置一个联系表单,当有人点击发送时,就会运行一个作业,并在该作业中向所有管理员用户发送通知。不过,我在失败的工作表中不断收到此错误: Illuminate\Database\El
我是一名优秀的程序员,十分优秀!