我正在使用Visual Studio2005创建一个开源的C++库。我想提供与源代码一起预建的库。这些用VS2005构建的库是否也能在新版本的Visual Studio (特别是VS Express Edition 2008)上使用?或者我需要为每个VS版本提供单独的库?
发布于 2009-10-21 20:09:45
如果您正在分发静态库,那么您可能能够分发与版本无关的库,具体取决于您所做的工作。如果您只是调用操作系统,那么您可能没有问题。也许是C++ RTL函数。但是,如果您使用任何C++标准库函数、类或模板,则可能不会使用。
如果分发DLL,则每个VS版本都需要单独的库。有时,您甚至需要为不同的服务包级别使用单独的库。正如VolkerK所提到的,您的库的用户必须使用兼容的编译器和链接器设置。即使你做的每件事都是正确的,用户也可能需要链接到与你的库不兼容的其他库。
由于这些问题,与其花时间为您的用户构建所有这些库,不如花时间使它们尽可能容易地构建,这样用户就可以自己构建它们,而不是大惊小怪。
发布于 2009-10-21 20:13:16
正常情况下不会。使用VS工具构建的库被链接到提供C和C++标准库函数的“Microsoft C runtime”(名为MSVCRT,后跟一个版本号)中,如果您试图运行一个需要此运行时的两个不同版本的程序,则会发生错误。
最重要的是,不同的编译器版本会产生不同的编译代码,而且除了在最微不足道的情况下,来自一个编译器版本的代码经常与另一个版本不兼容(如果它们大量生成相同的代码,那么拥有不同的版本就没有意义了:)
发布于 2009-10-21 20:21:33
通常,不可能链接到使用不同编译器构建的库,同一编译器的不同版本,甚至同一编译器版本的不同设置,并获得一个工作的应用程序。(尽管它可能适用于语言和std库的特定子集。)C++没有标准的二进制接口--甚至没有像C中那样用于一些通用平台的标准二进制接口。
要实现这一点,您需要将您的库包装在一个C API中,或者您必须为您想要支持的每个编译器、编译器版本和编译器设置提供一个二进制文件。
https://stackoverflow.com/questions/1600399
复制相似问题