我在一家相机公司工作,我们为客户提供SDK。从历史上看,我们只提供了针对非调试CRT构建的SDK的发布版本。作为SDK包的一部分,我们提供了许多有关如何使用SDK的示例。这些示例包含使用debug CRT的Debug项目配置。在某些情况下,由于这些示例和它们链接的库使用不同的CRT,我们遇到了奇怪的行为。
我的问题是处理这种情况的适当方法是什么?我们是否应该分发使用调试CRT的库的调试版本?只要我们不提供pdb或最多提供剥离的pdb,那么所有专有信息仍应保持隐藏状态。假设在这样做时除了更大的,没有优化的二进制文件之外,应该没有其他负面影响吗?
通常的做法是分发针对调试CRT链接的调试二进制文件,还是仅继续分发版本构建?
答案 0 :(得分:2)
是的,您需要分发库的Debug和Release版本。分别使用/ MDd和/ MD构建,因此可以共享CRT。不同的版本,例如VSCP5,VS2008和VS2010版本的CRT。
这当然很痛苦。要将其缩小到单个库,您需要仔细制作您的公共接口,以便它不会暴露任何C ++对象或需要由客户端代码释放的任何指针。例外情况也是禁忌。常见的解决方案是使用COM。特别是自动兼容的界面可用于Windows上常用的大多数语言运行库。
答案 1 :(得分:0)
您可以考虑使用优化的调试版本,将其设置为使用库的调试版本,但是将所有优化标志设置为在版本构建中。这将防止执行中的细微差异影响用户体验。