我正在使用Visual Studio 2005创建一个开源C++库.我想提供预构建的库以及源代码.这些用VS2005构建的库是否也适用于较新版本的Visual Studio(特别是VS Express Edition 2008)?或者我是否需要为每个VS版本提供单独的库?
不通常,不.使用VS工具构建的库链接到"Microsoft C Runtime"(称为MSVCRT,后跟版本号),它提供C和C++标准库函数,如果您尝试运行需要此运行时的两个不同版本的程序,那么会发生错误.
最重要的是,不同的编译器版本会产生不同的编译代码,并且除了最琐碎的情况之外,来自一个编译器版本的代码经常与另一个编译器代码不兼容(并且如果他们生成相同的代码,则没有任何意义不同版本:))
如果要分发静态库,则可以分发与版本无关的库,具体取决于您正在执行的操作.如果您只是打电话给操作系统,那么您可能没问题.也许是C RTL功能.但是,如果您使用任何C++标准库函数,类或模板,那么可能不会.
如果分发DLL,则每个VS版本都需要单独的库.有时您甚至需要各种服务包级别的库.正如VolkerK所提到的,库的用户必须使用兼容的编译器和链接器设置.即使您做的一切正常,用户也可能需要与其他与您不兼容的库链接.
由于这些问题,我不是花时间尝试为您的用户构建所有这些库,而是花时间让它们尽可能易于构建,以便用户可以自己构建它们,而不用大惊小怪.
通常,不可能链接到使用不同编译器构建的库,相同编译器的不同版本,甚至相同编译器版本的不同设置,并获得工作应用程序.(虽然它可能适用于语言和std库的特定子集.)C++没有标准的二进制接口 - 甚至没有C语言中的常用平台.
要实现这一点,您需要将库包装在C API中,或者必须为要支持的每个编译器,编译器版本和编译器设置提供二进制文件.