我有一个应用程序,其中STL对象被用作C ++接口的一部分,供插件编写者使用。
我知道为了兼容性最好的选择是使用C接口,但目前不可行。
我知道libstdc++中从GCC 3.4到4.8的所有内容在ABI方面都非常兼容。
例如,如果我使用GCC 4.1进行编译,并且插件供应商编写与GCC 4.7编译的代码,则除了角落情况外,在具有与GCC 4.7或更高版本对应的libstdc ++版本的平台上,前提是STL使用仅限于.so内部,而外部.so接口使用纯C,这是我所遇到的问题。
因此,我对作为插件接口一部分使用的STL类的情况很感兴趣。我能否安全地在未使用相同编译器版本(例如4.1和4.8)编译的共享对象之间传递STL对象?如果使用不同的编译器选项,我需要注意什么关于如何编译和解析模板的事情吗?
我认为这可能会有问题。但是,GCC人员完成的符号版本魔术可能会让这个工作。
对于此问题,我只对C++11之前的编译和链接感兴趣。我还只对在Linux和Mac OS X上使用GCC感兴趣。