欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++开发新版本vs使用旧版本vs编译的静态库动态库

程序员文章站 2022-03-20 21:08:10
关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++)。主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成它时所用的同一工具集进行链接。即若在编译静态库时开启了全程序优化,那么编译出的静态库不可移植。 2. ......

关于vs潜在的升级问题概述 (visual c++)查看官网的介绍:潜在的升级问题概述 (visual c++)。主要问题:

1. 如果使用 /gl(全程序优化)进行编译,则生成的对象文件只能使用生成它时所用的同一工具集进行链接。即若在编译静态库时开启了全程序优化,那么编译出的静态库不可移植。

2. 在 visual studio 2013 及更低版本中,不能保证使用不同编译器工具集和运行时库版本生成的对象文件 (obj)、静态库 (lib)、动态库 (dll) 和可执行文件 (exe) 之间的二进制兼容性。在 visual studio 2015 及更高版本中,使用两个版本之一的编译器编译的运行时库和应用程序是二进制兼容的。 这意味着,如果拥有使用 visual studio 2015 生成的第三方库,则无需对其进行重新编译即可通过使用 visual studio 2017 或 visual studio 2019 生成的应用程序使用该库。关于二进制兼容可以查看:visual studio 2015 和 visual studio 2019 之间的 c++ 二进制兼容性

3. 对于vs2013及更早版本编译的静态库,在vs及之后版本中提供了库 legacy_stdio_definitions.lib,该库提供了符号兼容性。但是,对于某些从通用 crt 删除的符号,则无法提供兼容性符号。 这些符号包括一些函数(例如,__iob_func)和数据导出(例如,__imp___iob、__imp___pctype、__imp___mb_cur_max)。

 

参考:windows下c++开发新版本vs使用旧版本vs编译的静态库动态库(项目vs版本升级)

如果想让c++项目在不同版本vs下同时开发可以参考