首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用不同版本的Visual Studio创建的C++库相互兼容吗?

用不同版本的Visual Studio创建的C++库相互兼容吗?
EN

Stack Overflow用户
提问于 2009-10-21 20:05:25
回答 4查看 13K关注 0票数 26

我正在使用Visual Studio2005创建一个开源的C++库。我想提供与源代码一起预建的库。这些用VS2005构建的库是否也能在新版本的Visual Studio (特别是VS Express Edition 2008)上使用?或者我需要为每个VS版本提供单独的库?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-21 20:09:45

如果您正在分发静态库,那么您可能能够分发与版本无关的库,具体取决于您所做的工作。如果您只是调用操作系统,那么您可能没有问题。也许是C++ RTL函数。但是,如果您使用任何C++标准库函数、类或模板,则可能不会使用。

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

由于这些问题,与其花时间为您的用户构建所有这些库,不如花时间使它们尽可能容易地构建,这样用户就可以自己构建它们,而不是大惊小怪。

票数 19
EN

Stack Overflow用户

发布于 2009-10-21 20:13:16

正常情况下不会。使用VS工具构建的库被链接到提供C和C++标准库函数的“Microsoft C runtime”(名为MSVCRT,后跟一个版本号)中,如果您试图运行一个需要此运行时的两个不同版本的程序,则会发生错误。

最重要的是,不同的编译器版本会产生不同的编译代码,而且除了在最微不足道的情况下,来自一个编译器版本的代码经常与另一个版本不兼容(如果它们大量生成相同的代码,那么拥有不同的版本就没有意义了:)

票数 21
EN

Stack Overflow用户

发布于 2009-10-21 20:21:33

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

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1600399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档