当前位置:  开发笔记 > 编程语言 > 正文

使用不同版本的Visual Studio创建的C++库是否相互兼容?

如何解决《使用不同版本的VisualStudio创建的C++库是否相互兼容?》经验,为你挑选了3个好方法。

我正在使用Visual Studio 2005创建一个开源C++库.我想提供预构建的库以及源代码.这些用VS2005构建的库是否也适用于较新版本的Visual Studio(特别是VS Express Edition 2008)?或者我是否需要为每个VS版本提供单独的库?



1> workmad3..:

不通常,不.使用VS工具构建的库链接到"Microsoft C Runtime"(称为MSVCRT,后跟版本号),它提供C和C++标准库函数,如果您尝试运行需要此运行时的两个不同版本的程序,那么会发生错误.

最重要的是,不同的编译器版本会产生不同的编译代码,并且除了最琐碎的情况之外,来自一个编译器版本的代码经常与另一个编译器代码不兼容(并且如果他们生成相同的代码,则没有任何意义不同版本:))



2> Kristopher J..:

如果要分发静态库,则可以分发与版本无关的库,具体取决于您正在执行的操作.如果您只是打电话给操作系统,那么您可能没问题.也许是C RTL功能.但是,如果您使用任何C++标准库函数,类或模板,那么可能不会.

如果分发DLL,则每个VS版本都需要单独的库.有时您甚至需要各种服务包级别的库.正如VolkerK所提到的,库的用户必须使用兼容的编译器和链接器设置.即使您做的一切正常,用户也可能需要与其他与您不兼容的库链接.

由于这些问题,我不是花时间尝试为您的用户构建所有这些库,而是花时间让它们尽可能易于构建,以便用户可以自己构建它们,而不用大惊小怪.


甚至项目设置/编译器标志也可能导致同一编译器版本中的二进制不兼容代码,例如/ Zc:wchar_t(默认情况下,它是VS2005中的重大变化)

3> sbi..:

通常,不可能链接到使用不同编译器构建的库,相同编译器的不同版本,甚至相同编译器版本的不同设置,并获得工作应用程序.(虽然它可能适用于语言和std库的特定子集.)C++没有标准的二进制接口 - 甚至没有C语言中的常用平台.

要实现这一点,您需要将库包装在C API中,或者必须为要支持的每个编译器,编译器版本和编译器设置提供二进制文件.


GCC定义了所有GCC版本使用的标准ABI.英特尔的编译器使用相同的ABI,因此可以使用由intel编译的库.但是,workmad3提到的库和应用程序之间的MSVCRT和glibc需要相同.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有