GCC compatibility of shared libraries with STL objects in their interface
我有一个STL对象的应用程序,作为插件编写器的C++接口的一部分。
我知道兼容性的最佳选择应该是使用C接口,但这目前不可行。
我知道libstdc++中从gcc 3.4到4.8的所有内容在abi方面都高度兼容。
例如,如果我用gcc 4.1编译,并且一个插件供应商编写用gcc 4.7编译的代码,那么在一个使用libstdc++版本(与gcc 4.7或更高版本相对应)的平台上,如果stl的使用是.so内部的,并且外部.so接口使用的是纯C,不幸的是,这不是针对我。
所以,我很好奇对于作为插件接口的一部分使用的STL类会发生什么情况。我是否可以在未使用相同编译器版本(例如4.1和4.8)编译的共享对象之间安全地传递STL对象?如果人们使用不同的编译器选项,我是否需要注意如何编译和解析模板?
我怀疑会有问题的。然而,GCC人员所做的符号版本控制魔法有可能以某种方式使这项工作得以实现。
对于这个问题,我只对C++11之前的编译和链接感兴趣。我也只对使用gcc的Linux和MacOSX感兴趣。
我已经在邮件列表上回答了这个问题,但正如马克所说,它会起作用的。
无论您是在DSO内部使用库还是在接口中使用库,都没有任何区别,库不关心,并且以任何方式向后兼容回GCC 3.4。