我应该链接到同名的Debug或Release dll吗?

时间:2019-01-07 16:27:22

标签: c++ visual-studio dll linker

我正在研究MS Visual Studio项目,并注意到当具有相同名称的调试库也可用时,调试版本正在链接到发布库(DLL)。我将路径切换为链接调试库,它似乎仍然可以工作。有什么办法知道我的更改是否正确?

其他信息:

使用调试DLL会触发少量的内存泄漏,而泄漏不是由发行版DLL触发的。或者可能是与调试相关的缓存数据。那个泄漏使我怀疑它是否包含不带_DEBUG的lib头文件。因此就是这个问题。

2 个答案:

答案 0 :(得分:1)

这是将程序的Debug版本与外部动态库的Debug版本链接的首选方法,因为它可以确保使用统一的Visual C ++运行时库。混合使用Debug和Release模式构建的库将导致Debug和Release VC ++运行时都被链接,并且在冲突的Debug / Runtime库中会出现有关多个符号定义的令人讨厌的链接器警告。

有时候这是不可避免的,因为只有某些外部库的发行版才可用。因此,在VC ++中,链接器设置允许忽略某些特定的库。因此,如果已经为现有冲突定义了此类忽略,则可以开始检查Debug构建的Linker-Input设置。如果有运气,您现在可以将其删除。

如果使用某些库的Debug版本破坏了整个程序,则可能是如何改进整个系统的真知灼见,这毕竟是Debug构建的目的。

答案 1 :(得分:0)

假定它是正确的库(如在同一代码中编译为不同配置的代码一样),则可以链接到调试配置上的调试dll(并且应链接到发布配置上的发布dll)。

差异通常与优化级别有关(调试通常在没有任何优化的情况下进行编译),并且可能包含任何符号以使其易于开发,甚至可能涉入其中。