首页 > 解决方案 > 适用于 Android 的自定义 libc++

问题描述

假设我要发布 AAR,其中包括 C++(jni) 库。Android 文档建议发布单个本地库,该库静态链接 libc++ 并隐藏除 Java_xxx 之外的所有符号。最重要的论点之一是,如果您链​​接 libc++_shared.so,您必须将该库与您的 aar 一起发布,它可能与其他 aar 的 libc++_shares.so 或应用程序自己的库发生冲突。嗯,很清楚。

尽管如此,我仍然想用共享版本的 libc++ 发布我的库。

不能有别的选择吗?如此处所述它是 llvm 的libc++ ,并且可以使用指定 abi 命名空间的选项来构建它,这应该有助于编译具有唯一符号的自定义 libc++:

LIBCXX_ABI_NAMESPACE:STRING¶ 默认值:__n 其中 n 是当前 ABI 版本。

此选项定义内联 ABI 版本控制命名空间的名称。它可用于构建具有唯一符号名称的 libc++ 自定义版本,以防止与其他 libc++ 版本发生冲突或 ODR 问题。

因此,计划是使用唯一的 LIBCXX_ABI_NAMESPACE(例如 __iddqd)构建自定义 libc++,使用唯一前缀 (my_libc++.so) 的名称库,使用 my_libc++.so 而不是 Android 的 libc++ 构建我的库,仅此而已。与第三方 aars 和应用程序没有冲突,但仍然是共享版本的 libc++。

是否有意义?我错过了什么重要的事情吗?有人有这种方法的经验吗?

标签: androidc++stlclanglibc++

解决方案


推荐阅读