为什么不能互换地使用lib的调试/发布版本

时间:2010-12-26 00:39:08

标签: libstdc++

在C ++中,大多数lib都是Debug / Release版本。 问题1.调试版和发布版之间有什么大的区别(例如,使用一个版本与另一个版本有什么优势)。

问题2. lib只是有一个函数的实现,如果你使用调试/发布版本,函数实现如何改变?

问题3.您是否可以在调试模式下构建应用程序并使用lib的发行版?

感谢。

2 个答案:

答案 0 :(得分:3)

答案1

调试模式

  • 包含用于调试的符号。换句话说,您的调试器可以将程序的当前位置链接到源代码中的位置
  • 可能包含仅调试代码,例如#ifdef DEBUG块中的代码

发布模式

  • 更快,因为它删除了与调试相关的代码。
  • 由于缺少符号而在调试方面受到限制。

答案2

  • 取决于图书馆的实施方式

答案3

  • 仅当他们具有相同的ABI

答案 1 :(得分:1)

调试版本通常只需很少的优化即可构建 - 因此当您在带有源代码的调试器中逐步执行调试版本时,源代码行与之前的内容之间存在良好的映射关系。该程序。当您逐步完成高度优化的代码时,它不会很好地映射到源代码,并且更难调试。

此外,每当有人使用#ifdef DEBUG或同等版本时,该版本的代码(当然)都没有。这可能是额外的错误检查,记录,断言等。

通常,函数的接口在调试和发布之间不应该有所不同,因此您可以正常链接调试和发布,而不会有太多麻烦。

但是,有些情况(特别是在Windows上)由于内置于某些库中的DLL加载而变得非常困难。有些人可能会尝试加载DLL的调试版本,有些人可能想要发布。这些都不能加载到同一个过程中。