重申一下:我正在寻找同一版本的Visual C++库之间ABI兼容性!
我们想要混合和匹配来自不同团队的一些内部C++ DLL - 这些DLL是在不同时间使用不同的项目文件构建的。由于编译时间很长,我们确切地希望避免大型单块构建,其中每个团队重新编译另一个团队库的源代码。
当使用具有C++接口的C++ DLL时,相当 清楚 的 是只有当所有DLL都使用相同的编译器/Visual Studio版本编译时才能这样做。
对我而言不太明显的是,要获得ABI兼容性,需要什么完全相同。
- 显然,调试(
_DEBUG
)和发布(NDEBUG
)不能混用——但这也可以从它们链接到不同版本的共享运行时的事实中得出。 - 您是否需要完全相同的编译器版本,或者只需生成的DLL链接到相同的共享C++运行时,基本上链接到相同的redistributable即可?(我认为在传递完整的C++对象时,静态方式不可行)
- 有没有已记录的编译器(和链接器)选项列表,需要对于两个相同vc++版本的C++ DLL兼容?
- 例如,是否需要相同的
/O
开关 - 优化级别是否影响ABI兼容性?(我非常确定不会) - 或者两个版本是否都必须使用相同的
/EH
开关? - 或者
/volatile:ms|iso
... ?
- 例如,是否需要相同的
_ITERATOR_DEBUG_LEVEL
也是必须相等的一个东西,因为它会影响std-lib对象的布局。 - Martin Ba