关于不同版本VS编译获得的静态库、动态库的兼容性

这篇具有很好参考价值的文章主要介绍了关于不同版本VS编译获得的静态库、动态库的兼容性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

看了上一篇博客还是在6月13号,一直想着写一些东西,也准备了很多内容,没想到一直拖到了现在。今天终于掀开了我的笔记本盖子,按下了开机按钮,双击浏览器图标打开了博客页(浏览器图标都差点找不到了~~),赶紧写完一篇睡觉,明晚还要给我的小可爱做饭呢。。。

言归正传,下面就简单描述一下关于不同版本VS编译获得的静态库、动态库的兼容性问题,以下是参考msdn的描述:

Visual Studio 2013 和更早版本中的 Microsoft c + + (MSVC) 编译器工具集不保证主要版本之间的二进制兼容性。 不能链接对象文件、静态库、动态库以及由这些工具集的不同版本生成的可执行文件。 Abi、对象格式和运行库是不兼容的。

我们在 Visual Studio 2015、2017和2019中更改了此行为。 任何这些版本的编译器编译的运行时库和应用都是二进制兼容的。 它反映在 c + + 工具集的主编号(从14开始,适用于所有三个版本)。 (工具集版本适用于 Visual Studio 2015、v141 2017 和 2019) 的 v142。 假设你有 Visual Studio 2015 生成的第三方库。 你仍可以在 Visual Studio 2017 或2019生成的应用程序中使用它们。 无需使用匹配的工具集进行重新编译。 最新版本的 Microsoft Visual C++ 可再发行组件包 (可再发行组件) 适用于所有这些包。

二进制兼容性的限制

对于 v140、v141 和 v142 工具集和次要编号版本更新之间的二进制兼容性,有三个重要的限制:

  1. 可以混合使用不同版本的 v140、v141 和 v142 工具集生成的二进制文件。 但是,必须使用最新的工具集至少与应用中的最新二进制链接。 下面是一个示例:可以将使用任何2017工具集 (v141,版本15.0 到 15.9) 的应用链接到使用版本16.2 或更高版本的工具集进行编译的静态库,如 Visual Studio 2019 版本 16.2 (v142) 。 只要你使用的是16.4 或更高版本的工具集,你就可以将版本16.2 库链接到16.4 版应用。
  2. 应用使用的可再发行组件具有类似的二进制兼容性限制。 当混合使用不同的受支持版本的工具集生成的二进制文件时,可再发行版本必须至少与任何应用组件所用的最新工具集相同。
  3. 使用 /GL (完全程序优化)编译器开关或使用 /LTCG (链接时代码生成 进行链接的静态库或对象文件) 在不同版本之间 不 兼容二进制,包括次要版本更新。 使用和编译的所有对象文件和库 /GL /LTCG 必须使用完全相同的用于编译和最终链接的工具集。 例如, /GL 在 Visual Studio 2019 版本16.7 工具集中使用生成的代码无法链接到 /GL 在 Visual Studio 2019 版本16.8 工具集中使用生成的代码。 编译器发出错误 C1047。

将 Microsoft Visual C++ 可再发行组件从 Visual Studio 2015 或2017升级到 Visual Studio 2019

我们为 Visual Studio 2015、2017和2019保留了 Microsoft Visual C++ 的可再发行组件主版本号。 这意味着一次只能安装一个可再发行的实例。 较新的版本将覆盖已安装的任何较旧版本。 例如,一个应用可以安装 Visual Studio 2015 中的可再发行组件。 然后,另一个应用会安装 Visual Studio 2019 的可再发行组件。 2019版本覆盖了较旧的版本,但由于它们是二进制兼容的,所以前面的应用程序仍能正常工作。 我们确保最新版本的可再发行组件包含所有最新功能、安全更新和 bug 修复。 这就是我们始终建议升级到最新可用版本的原因。
同样,如果已安装较新版本,则无法安装较旧的可再发行组件。 如果尝试,安装程序将报告错误。 如果在已有2019版本的计算机上安装2015或2017可再发行组件,会看到类似于下面的错误:

0x80070666 - Another version of this product is already installed. Installation of this version cannot continue. To configure or remove the existing version of this product, use Add/Remove Programs on the Control Panel.

此错误是由设计决定的。 建议保留最新版本。 请确保安装程序可在不提示的情况下从此错误恢复。文章来源地址https://www.toymoban.com/news/detail-453578.html

到了这里,关于关于不同版本VS编译获得的静态库、动态库的兼容性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动态库、静态库的构建与使用

    所谓静态、动态是指 链接 。回顾一下,将一个程序编译成可执行程序的步骤: 链接 : 把外部函数的代码(通常是后缀名为.lib和.a的文件),添加到可执行文件中。这就叫做连接(linking)。这种通过拷贝,将外部函数库添加到可执行文件的方式,叫做静态连接(static linki

    2024年02月06日
    浏览(39)
  • 动态库和静态库的使用

    库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码,相当于进行了加密,别人可以使用库,但是看不到库中的内容。 常见的库类型 共享库 静态库 动态库 win32平台下,静态库通常后缀为.lib,动态库为.dll 。 linux平台下

    2024年02月03日
    浏览(78)
  • 【linux深入剖析】动态库的使用(续) | 动静态库的链接

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 回顾上节,我们在创建了动态库libmymath.so 我们使用指令 gcc main.c -L. -lmymath -L . (-L + 路径表示myc这个库在哪

    2024年04月15日
    浏览(34)
  • VS中动态库的创建和调用

    ​ 库 是写好的现有的,成熟的,可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 ​ 库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接阶段,静态库的链接阶段是在项目编译的时候静态链接。动态库是在程序运行的时候

    2024年02月02日
    浏览(35)
  • 【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载

    【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载 单一模型: 将程序中所有功能全部实现于一个单一的源文件内部。编译时间长,不易于维护和升级不易于协作开发。 分离模型 将程序中的不同功能模块划分到不同的源文件

    2024年01月15日
    浏览(47)
  • 静态链接库和动态链接库的区别

    在编译时将库的代码( .lib文件 )和应用程序的代码合并在一起,生成一个单独的可执行文件。 发布时非常方便,直接一个.exe文件即可 库的代码在编译时和链接时与应用程序分开。应用程序包含对库的引用( .lib文件 ,在这里被称为导入库),但不包含库的实际代码。 在 运行

    2024年02月11日
    浏览(36)
  • Linux中静态库和动态库的使用

    介绍: 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码,可下载后编译;也可以直接安装二进制包 位置一般放在:/lib /usr/lib 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库,使用库可以提高开发效率

    2024年01月25日
    浏览(33)
  • 【Linux】Linux编译器 gcc 的使用 | 动静态库的初步认识

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux

    2024年01月15日
    浏览(29)
  • windows下qt使用第三方库(静态链接库lib)、静态库和动态库区别、动态库的使用。

    这里主要是讲述windows下qt使用第三方库。 windows下qt使用第三方库(静态链接库lib)。 为了能够使测试更准确,首先自己用qt创建了一个已经封装好的lib库。 然后让另一个项目去链接这个lib静态库,并且去调用里面的方法。 目的: 使 untitled项目 能够使用 myllplib.lib 静态库,这

    2023年04月17日
    浏览(79)
  • Rust : 与C交互动态库和静态库的尝试

    rust调用C端的库函数,有很多方法,场景也有所不同。包括windows还是linux,内置库还是自定义库,还是三方库等等。 一、rust调用其内置的C库 这个很简单,直接把extern \\\"C\\\"引入即可: 比如,在rust端main.rs中: 不需要做其它的处理,直接cargo run 就可以运行。 二、自定义的C库-以

    2024年02月04日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包