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

Posted skytcat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++开发新版本vs使用旧版本vs编译的静态库动态库相关的知识,希望对你有一定的参考价值。

关于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版本升级)http://comonly.cn/l/p/1198.html

如果想让C++项目在不同版本vs下同时开发可以参考https://blog.csdn.net/weixin_42259823/article/details/100164754

以上是关于C++开发新版本vs使用旧版本vs编译的静态库动态库的主要内容,如果未能解决你的问题,请参考以下文章

VS不同编译器,x86,x64,动态库,静态库交叉引用问题

VS不同编译器,x86,x64,动态库,静态库交叉引用问题

VS2019 C++动态链接库的创建使用

VS2012编译的DLL动态库为啥在VS2012上调用正常,在VS2008上使用失败

vs2019编译ffmpeg4.4为静态库或动态库

vs2019编译ffmpeg4.4为静态库或动态库