DLL和编译器设置

时间:2013-03-13 09:27:29

标签: c++ visual-c++ dll compiler-construction linker

许多文章和帖子警告编译器设置在链接和使用DLL时可能导致不兼容。

如果您在使用C ++编写DLL时遵循最佳实践并使用extern“C”导出函数并仅使用POD数据类型或坚持接口(纯虚拟)类,那么可能导致问题的编译器设置是什么? / p>

您如何知道哪些编译器设置会导致问题?不同的编译器会有不同的设置吗?是否有可用的Visual C ++编译器设置列表?

1 个答案:

答案 0 :(得分:6)

这不是一个明确的清单,但我记得的是:

  1. 链接到不同的运行时,例如,链接到主可执行文件中的调试Visual C ++运行时以及链接到要导入的DLL中的Visual C ++运行时版本也会导致问题。 (代码生成 - >运行时库选项)

  2. 也不建议链接到不同版本的C ++运行时(即VC90和VC100)。 (常规标签 - >平台工具集选项)

  3. 请注意DLL使用的调用约定(C / C ++高级选项卡 - >调用约定选项)

  4. 在两个模块之间传递结构时,确保两个模块具有相同的包装(C / C ++ - >代码生成 - >结构成员对齐选项)

  5. 不确定,但听起来很合理,他们应该有相同的异常处理模型(C / C ++ - >代码生成 - >启用C ++例外选项)

  6. 相同的浮点模型,如果你要传递浮动数据(C / C ++ - >代码生成 - >浮点模型选项)

  7. 两个模块都是相同的架构,显然(Intel x86,AMD x64,Itanium,ARM等)

  8. 对于问题的第二部分,here是关于所有编译器选项的综合文档。