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

标签 c++ runtime msvcrt crt

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

我的问题是处理这种情况的适当方法是什么?我们是否应该分发使用调试 CRT 的库的调试版本?只要我们不提供 pdb 或最多不提供剥离的 pdb,那么所有专有信息都应该保持隐藏状态。假设在这样做时除了一个更大的、未优化的二进制文件之外应该没有其他负面影响是否正确?

分发链接到调试 CRT 的调试二进制文件是常见的做法,还是我们应该继续只分发发布版本?

最佳答案

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

这当然很痛苦。要将其缩小为单个库,您需要精心设计公共(public)接口(interface),使其不会暴露任何 C++ 对象或任何需要由客户端代码释放的指针。异常(exception)也是禁忌。一个常见的解决方案是使用 COM。尤其是自动化兼容接口(interface)可供 Windows 上常用的大多数语言运行时使用。

关于c++ - 如果最终用户需要链接到调试 CRT,分发 SDK 的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7502952/

相关文章:

c++ - 如何在 C++ 中获取具有给定位模式(如 int32_t)的 float ?

c++ - 为什么我的代码总是跳过 C++ 的 else 语句?

c++ - C++中的try catch在未命中时会影响性能吗

java - 有没有办法在 JVM 中找到加载的类文件?

ios - iPhone 中的运行时类创建

c++ - Visual Studio CRT - 如何使用静态和动态 CRT 共享客户端使用的静态库?

c++ - msvcrt.dll 是否为其 rand() 函数使用线性同余生成器?

visual-studio - 为什么我需要安装 MSVC++ redist。?

c++ - char** x = (char**) arg 是否等同于 reinterpret_cast<char**>(const_cast<void*>(arg) )?

time - N+N/2+N/4...迭代运行时间