共享库接口设计可实现Android和gcc / clang兼容性

时间:2018-12-11 19:59:48

标签: c++ abi

这更多是关于Android的设计问题。

我有一个共享库,它公开了某种接口,让我们假设IFoo。我不想创建通常的IFoo* CreateFoo()DeleteFoo(IFoo*)对,而是想制作一个CreateFoo(std::shared_ptr<IFoo>&)模式,在构造std::shared_ptr时在内部设置一个适当的删除器,以便客户端不负责手动释放接口。现在,这在Windows和MacOS上还可以,但是我遇到了Android方面的问题。假设我需要能够支持gcc和clang ndk版本(我知道从ndk 18开始不推荐使用gcc,但是仍然有人使用旧版本的ndk来生产代码)。出现的问题是,由于名称修改,如果共享对象是使用clang构建的,并且他使用gcc或相反,则不能使用CreateFoo(std::shared_ptr<IFoo>&)方法。我可以:

  • 运送两个版本的共享库(一个gcc和一个clang版本)
  • 回到IFoo的单独创建和删除方法

但是也许还有其他解决此问题的好方法?

0 个答案:

没有答案