如果需要最终用户链接到调试 CRT,分发 SDK 的最佳方式是什么?

What's the best way to distribute your SDK if the end user is required to link against the Debug CRT?

本文关键字:SDK 分发 最佳 是什么 方式 CRT 调试 用户 链接 如果      更新时间:2023-10-16

我在一家相机公司工作,我们为客户提供SDK。从历史上看,我们只提供了针对非调试CRT构建的SDK的发布版本。作为SDK包的一部分,我们提供了许多关于如何使用SDK的示例。示例具有使用调试CRT的Debug项目配置。在某些情况下,由于这些示例和它们所链接的库使用不同的CRT,我们会遇到奇怪的行为。

我的问题是处理这种情况的合适方法是什么?我们应该发布一个使用调试CRT的库的调试版本吗?只要我们不提供pdb或至多提供剥离的pdb,那么所有专有信息应该仍然是隐藏的。假设这样做除了一个更大的,未优化的二进制之外,不应该有其他负面影响,这是正确的吗?

通常的做法是发布一个与调试CRT相链接的调试二进制文件,还是我们应该继续只发布发布版本?

是的,您需要分发库的调试和发布版本。分别使用/MDd和/MD构建,因此CRT可以共享。还有不同的版本,比如VS2005、VS2008和VS2010版本的CRT。

这当然是痛苦的。为了将其缩小到单个库,您需要仔细设计公共接口,使其不暴露任何需要由客户机代码释放的c++对象或指针。例外也是禁忌。一个常见的解决方案是使用COM。尤其是一个自动化兼容的接口,可以被Windows上常用的大多数语言运行库使用。

您可能会考虑一个优化的调试构建,它被设置为使用库的调试版本,但设置了所有的优化标志,就像它们在发布构建中一样。这将防止执行中的细微差异影响用户体验。