如果需要最终用户链接到调试 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构建的SDK的发布版本。作为SDK包的一部分,我们提供了许多关于如何使用SDK的示例。示例具有使用调试CRT的Debug项目配置。在某些情况下,由于这些示例和它们所链接的库使用不同的CRT,我们会遇到奇怪的行为。
我的问题是处理这种情况的合适方法是什么?我们应该发布一个使用调试CRT的库的调试版本吗?只要我们不提供pdb或至多提供剥离的pdb,那么所有专有信息应该仍然是隐藏的。假设这样做除了一个更大的,未优化的二进制之外,不应该有其他负面影响,这是正确的吗?通常的做法是发布一个与调试CRT相链接的调试二进制文件,还是我们应该继续只发布发布版本?
是的,您需要分发库的调试和发布版本。分别使用/MDd和/MD构建,因此CRT可以共享。还有不同的版本,比如VS2005、VS2008和VS2010版本的CRT。
这当然是痛苦的。为了将其缩小到单个库,您需要仔细设计公共接口,使其不暴露任何需要由客户机代码释放的c++对象或指针。例外也是禁忌。一个常见的解决方案是使用COM。尤其是一个自动化兼容的接口,可以被Windows上常用的大多数语言运行库使用。
您可能会考虑一个优化的调试构建,它被设置为使用库的调试版本,但设置了所有的优化标志,就像它们在发布构建中一样。这将防止执行中的细微差异影响用户体验。
相关文章:
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 我需要分发哪些版本的可再分发文件
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 升级到 Windows 10 版本 1809 SDK 后,我无法编译使用 C++/WinRT 的项目
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- Eventloop 卡住:NAO C++ SDK OnFaceDetection 示例
- 构建失败错误:无法使用 qibuild 构建C++ SDK Helloworld
- Microsoft C++ 用于图形 API 的 Rest SDK
- 如何检索 Steamwork SDK 的当前版本
- 佳能SDK无法从相机下载图片
- 如何使用 CPP REST SDK 实现 CAS(中央认证服务)?
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- 关于 API 文档和设备操作 在助手-sdk-cpp 上
- C++标准视窗 SDK 文件中的编译错误
- DLL:当 SDK 头文件不使用 __declspec(dllexport) 时,我可以使用它吗
- 将 aws-iot-device-sdk-cpp-v2 与 CMake 结合使用
- "byte":使用Crypto++和Windows SDK时出现不明确的符号错误
- FBX SDK 在预期 3 个顶点时返回 4 个顶点
- 如果需要最终用户链接到调试 CRT,分发 SDK 的最佳方式是什么?