首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++动态发布库和调试库有什么不同?

C++动态发布库和调试库有什么不同?
EN

Stack Overflow用户
提问于 2012-09-12 21:15:25
回答 1查看 1.7K关注 0票数 4

我有一个关于C++动态库的问题。通常,C++动态库由一个.lib文件和一个.dll文件组成。如果我理解得很好,当.dll包含实现时,.lib文件记录了导出函数的位置。我知道发布版本有一些优化,因此发布dll和调试dll应该是不同的。那么,发布库文件和调试库文件之间的主要区别是什么?有没有办法区分lib (或dll)文件是发布版本还是调试版本?如果发布版本的程序调用调试版本库,会发生什么?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-12 21:26:30

请注意,"Release“和"Debug”只是一组编译器和链接器标志和设置的标签,通常内部"Release“构建仍然会生成调试信息,但会有更高的优化设置。

因此,没有标准的方法来辨别lib或DLL是“发布”还是“调试”版本,除非它由诸如"d“后缀或库的位置之类的东西显式地指示。

当“发布”配置可执行文件调用到“调试”配置库中时会发生什么,这取决于两者之间不同的特定编译和链接器设置。在几乎所有的情况下,你都会遇到很多麻烦,有时是非常明显的,有时是更隐蔽的。一些常见的故障来源:

  • 这两个库可能使用不同版本的运行时库,并且可能具有某些变量的不同副本,这些变量被认为是静态的,并且在可执行文件中的所有库中都是相同的,例如内存分配池及其计数器/标记。一个症状是你会得到奇怪的内存分配/释放错误。
  • 这些库可能会在标准库中采用不同的约定,例如安全设置或迭代器调试。这将使得“标准”容器的内存布局在不同的库中实际上是不同的,如果你走运,你会得到访问冲突,如果你不走运,你会得到不可预测的行为。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12389074

复制
相关文章

相似问题

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