如何使用 Visual Studio 2019 构建最兼容的二进制文件?
Posted
技术标签:
【中文标题】如何使用 Visual Studio 2019 构建最兼容的二进制文件?【英文标题】:How to build the most compatible binary with Visual Studio 2019? 【发布时间】:2019-07-22 09:18:50 【问题描述】:我在win7下使用VS2019 for C和C++ 我想构建(x32 位还是 x64 位?)二进制文件,可以在所有以后的操作系统(包括 Windows Server 2019)下正确运行 我必须设置 WINVER/_WIN32_WINNT 吗?这是否涉及建筑环境或目标环境?如果是,是哪个值?https://docs.microsoft.com/en-us/cpp/porting/modifying-winver-and-win32-winnt?view=vs-2019
【问题讨论】:
无限制的可移植性将成为一个问题,因为低端机器可能只有 32 位,而专用服务器只能是 64 位。但我看不到针对具有相同可执行文件的两个系统的用例。 您很少需要担心与未来版本的 Windows 操作系统的兼容性。如果它在 Windows 10 上运行良好,它将在 Windows 11 和 12 等上运行良好......但是如果你想针对 Windows 7 等较旧的操作系统,你可能需要做一些调整如果你正在使用更新的 API 和服务。 【参考方案1】:在 Windows 上,与 Linux 不同,构建环境几乎完全无关紧要。链接时,您不会链接到构建环境中的库,而是链接到 Windows SDK。
严格来说,您可能不需要 WINVER
和 _WIN32_WINNT
。它们主要帮助隐藏<windows.h>
中的函数,因此您最终不会调用您不打算调用的函数。
但是有一些罕见的结构在 Windows 版本中布局发生了变化,在这种情况下,您希望使用旧布局。 Windows 10 支持这两种布局;通常通过检查结构的.cb
成员。您将此字段设置为sizeof(type)
,此大小将取决于WINVER
变量。
【讨论】:
大家都在谈论Windows 10,请原谅我不够精确:主要目标是Windows Server 2xxx。 大家都在谈论Windows 10,请原谅我不够精确:主要目标是Windows Server 2xxx。 VS自带的SDK是10.1.0,如果目标SDK版本较小,运行我的exe可以吗?我们可以在这个标头中看到 WS2003 和 WS2008(我们仍然有几个),如果我没有设置 WINVER/_WIN32_WINNT,我怎么能确定我的 win7 生成的二进制文件在两者(较旧)上都可以正常运行?所以也许每个二进制文件对两个变量都有很好的价值? @Minstrel:同样的想法。 Windows Server 还会检查.cb
字段,这些结构随着时间的推移会出现多种形式。 VS2019 SDK 对 Server 2003 的支持你担心是对的;自 2015 年以来不再支持。2008R2 可能仍受支持,因为 2008R2 将在 2020 年 EOL。以上是关于如何使用 Visual Studio 2019 构建最兼容的二进制文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2019 CMake 项目(Windows 10)上安装 SDL2
Visual Studio 命令行 (devenv) 和 IDE 构建有啥区别?
如何在 Visual Studio 2019 中使用 C#10
如何使用 Visual Studio 2019 构建 GTK+ 应用程序?