Libstdc++ 为什么可以';您是否可以互换使用lib的调试/发布版本 在C++中,大多数LIBS都是在调试/发布版本中出现的。 问题1。调试版本和发布版本之间的最大区别是什么(例如,使用其中一个版本与使用另一个版本相比有什么优势)

Libstdc++ 为什么可以';您是否可以互换使用lib的调试/发布版本 在C++中,大多数LIBS都是在调试/发布版本中出现的。 问题1。调试版本和发布版本之间的最大区别是什么(例如,使用其中一个版本与使用另一个版本相比有什么优势),libstdc++,Libstdc++,问题2。一个库只有一个函数的实现,如果您使用的是调试/发布版本,函数实现会发生什么变化 问题3。你能在调试模式下构建应用程序并使用lib的发布版本吗 谢谢。回答1 调试模式 包含用于调试的符号。换句话说,调试器可以将程序的当前位置链接到其在源代码中的位置 可能只包含调试代码,例如#ifdef debug块中的代码 释放模式 更快,因为它已删除与调试相关的代码 由于缺少符号,因此在调试中受到限制 答复2 取决于库的实现方式 答复3 除非他们有相同的 调试版本通常在构建时很少进行优

问题2。一个库只有一个函数的实现,如果您使用的是调试/发布版本,函数实现会发生什么变化

问题3。你能在调试模式下构建应用程序并使用lib的发布版本吗

谢谢。

回答1 调试模式
  • 包含用于调试的符号。换句话说,调试器可以将程序的当前位置链接到其在源代码中的位置
  • 可能只包含调试代码,例如
    #ifdef debug
    块中的代码
释放模式
  • 更快,因为它已删除与调试相关的代码
  • 由于缺少符号,因此在调试中受到限制

答复2
  • 取决于库的实现方式

答复3
  • 除非他们有相同的

调试版本通常在构建时很少进行优化——因此,当您在带有源代码的调试器中逐步执行调试版本时,很有可能在源代码行和程序中发生的事情之间存在良好的映射。当您单步执行高度优化的代码时,它不会很好地映射回源代码,并且更难调试

此外,每当有人使用
#ifdef DEBUG
或等效程序时,该代码在发布版本中并不存在(当然)。这可能是额外的错误检查、日志记录、断言等

通常情况下,调试和发布之间的函数接口不应该有所不同,因此您可以正常地将调试和发布链接在一起,而不会遇到太多麻烦


但是,在某些情况下(尤其是在Windows上),由于某些LIB中内置了DLL加载,因此变得非常困难。有些可能尝试加载DLL的调试版本,有些可能希望发布。它们不能同时加载到同一进程中。

回答3注释:在Windows上,调试和发布从来没有相同的API。