重复一遍:我正在寻找相同Visual-C++ 版本的库之间的 ABI 兼容性!
我们希望混合和匹配来自不同团队的一些内部 C++ DLL——在不同时间使用不同的项目文件构建。由于构建时间长,我们确实希望避免大型单体构建,每个团队都重新编译另一个团队库的源代码。
当使用具有 C++ 接口的 C++ DLL 时,很 明显只有 在所有 DLL 都使用相同的编译器/Visual Studio 版本编译时才能执行此操作。
对我来说不太明显的是,要获得 ABI 兼容性,必须完全相同。
- 显然debug (
_DEBUG
) 和 release (NDEBUG
) 不能混合使用——但从它们链接到不同版本的共享运行时这一事实也很明显。 - 您是否需要完全相同的编译器版本,或者生成的 DLL 链接到相同的共享C++ 运行时是否足够——也就是说,基本上是相同的可再发行文件?(我认为传递完整的 C++ 对象时静态不会飞)
- 对于相同 vc++ 版本的两个 C++ DLL 是否需要相同
的编译器(和链接器)选项的文档化列表才能兼容?
- 例如,是否
/O
需要相同的开关——优化级别会影响 ABI 兼容性吗?(我很确定不是。) - 还是两个版本都必须使用相同的
/EH
开关? - 还是
/volatile:ms|iso
……?
- 例如,是否
本质上,我想提出一组(元)数据与描述其 ABI 兼容性的 Visual-C++ DLL 相关联。
如果存在差异,我目前只关注 VS2015。