链接多个平台工具集是不是安全?
Posted
技术标签:
【中文标题】链接多个平台工具集是不是安全?【英文标题】:Is it safe to link against more than one Platform Toolset?链接多个平台工具集是否安全? 【发布时间】:2020-11-03 09:06:54 【问题描述】:我正在使用 Visual Studio 2019 和 Qt 在 Windows 上使用 C++ 编程。
我正在使用由另一个程序员创建的库,该库依赖于第 3 方 .dll,而后者又依赖于 msvcp140.dll 和 vcruntime140.dll。
我已经安装了 Platform Toolset Visual Studio 2015 (v140)。 但是我不希望与此链接,因为它似乎阻止我使用 ISO C++17 标准(当我选择 Platform Toolset="Visual Studio 2015 (v140)" 时,C++ 语言标准选项被删除)。
混合使用平台工具集:“Visual Studio 2015 (v140)”和“Visual Studio 2019 (v142)”是否安全?
另一个程序员这么说。他确保他的 API 不使用任何标准类(例如字符串)作为输入或输出。 这足够了吗,还是我需要考虑其他一些事情?
【问题讨论】:
Potential Errors Passing CRT Objects Across DLL Boundaries. 使用 v142 很好,他们从 VS2015 开始向后兼容。 【参考方案1】:正如 Hans Passant 所说,您可以继续将 V142 用于您的 VS2015 库。希望this document能帮到你:
任何这些版本的编译器编译的运行时库和应用程序都是二进制兼容的。它反映在 C++ 工具集主编号中,三个版本的主编号均为 14。 (工具集版本为 Visual Studio 2015 的 v140、2017 的 v141 和 2019 的 v142)。 假设您有由 Visual Studio 2015 构建的第三方库。您仍然可以在由 Visual Studio 2017 或 2019 构建的应用程序中使用它们。无需使用匹配的工具集重新编译。最新版本的 Microsoft Visual C++ Redistributable 包(Redistributable)适用于所有这些。
【讨论】:
以上是关于链接多个平台工具集是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章