【发布时间】:2011-08-09 19:51:22
【问题描述】:
假设我用 C++ 编写了一个 DLL,并想导出一个采用 std::vector 参数的方法。我可以希望不同 STL 版本之间的二进制兼容性吗?
【问题讨论】:
-
你甚至不能希望在具有不同编译器标志的相同 STL 版本中实现二进制兼容性。
标签: c++ stl binary-compatibility
假设我用 C++ 编写了一个 DLL,并想导出一个采用 std::vector 参数的方法。我可以希望不同 STL 版本之间的二进制兼容性吗?
【问题讨论】:
标签: c++ stl binary-compatibility
我不知道版本之间是否有任何兼容性保证,甚至在同一编译器上的发布和调试之间也不知道。
一种解决方案是为向量创建一个包装器。创建一个具有容器所需的所有功能的类,并根据对作为该类唯一成员的私有向量的操作来实现它们。将所有类代码保留在 DLL 中。
【讨论】:
/SAFESEH 和 /Eh 开关改变了二进制级别的异常模型,我相信至少 /GS 也是如此)
绝对不是!如果使用相同编译器的不同版本编译,您甚至不能依赖相同版本的 STL 兼容。
【讨论】:
如果您指的是同一编译器的更新版本所包含的版本,是的,它可以(并且将会)在某些情况下工作,但您必须小心。还有一些特殊情况,例如 Windows 上的 Intel 和 Microsoft 编译器——Intel 非常小心地保持二进制兼容性,至少当我尝试过时,它总是运行得很好。
对于大多数其他情况,答案是否定的。
【讨论】: