gpt4 book ai didi

c++ - 共享库与接口(interface)中的 STL 对象的 GCC 兼容性

转载 作者:IT老高 更新时间:2023-10-28 23:01:41 24 4
gpt4 key购买 nike

我有一个带有 STL 对象的应用程序,用作插件编写器的 C++ 接口(interface)的一部分。

我知道最好的兼容性选择是使用 C 接口(interface),但目前不可行。

我知道 libstdc++ 中从 GCC 3.4 到 4.8 的所有内容在 ABI 方面都高度兼容。

因此,例如,如果我使用 GCC 4.1 编译,而插件供应商编写使用 GCC 4.7 编译的代码,那么在具有对应于 GCC 4.7 或更高版本的 libstdc++ 版本的平台上,除了极端情况外,所有情况都很好,< strong>提供的 STL 使用仅限于 .so 内部,并且外部 .so 接口(interface)使用纯 C,遗憾的是我不是这种情况。

所以,我很好奇关于用作插件接口(interface)一部分的 STL 类的情况。我可以在未使用相同编译器版本(例如 4.1 和 4.8)编译的共享对象之间安全地传递 STL 对象吗?如果人们使用不同的编译器选项,我需要注意如何编译和解析模板吗?

我怀疑这会有问题。但是,GCC 人员所做的符号版本控制魔法有可能以某种方式使这项工作发挥作用。

对于这个问题,我只对 C++11 之前的编译和链接感兴趣。我也只对使用 GCC 的 Linux 和 Mac OS X 感兴趣。

最佳答案

我已经在 mailing list 上回答了这个问题但正如 Marc 所说,它会起作用。

无论您是在 DSO 内部还是在接口(interface)中使用该库都没有任何区别,该库并不关心,并且无论哪种方式都向后兼容回 GCC 3.4。

关于c++ - 共享库与接口(interface)中的 STL 对象的 GCC 兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33958773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com