仅在将 sourceSets 与其他 ABI 的库一起使用时支持 x86 ABI

Posted

技术标签:

【中文标题】仅在将 sourceSets 与其他 ABI 的库一起使用时支持 x86 ABI【英文标题】:Support x86 ABI when using sourceSets with libraries for other ABIs only 【发布时间】:2020-02-25 07:38:40 【问题描述】:

我正在使用 sourceSets 禁用自动 ndk-build 调用以集成本机库,但我只有 armeabi-v7a 和 arm64-v8a 的本机库。当我尝试构建时,我收到“所有具有本机库的模块必须支持同一组 ABI”的错误,因为我的动态功能只有 2 个 ABI,但我的基本模块也有 x86。在没有原生库的情况下,如何使动态功能也支持 x86?

我只有在使用 android App Bundle 并将其设为动态功能时才会收到错误消息,之前没问题。

sourceSets 
        development 
            jni.srcDirs = []
            jniLibs.srcDirs = ["$project.buildDir/nativelibs", "$project.buildDir/developmentnativelibs"]
        

【问题讨论】:

【参考方案1】:

我创建了一个文件夹 ./x86 并在其中放置了一个空的 empty.so 文件,因此我的模块现在支持 x86 ABI。

【讨论】:

这是正确的做法。这会通知 Android 平台,如果设备支持,应用必须以 x86 模式启动。

以上是关于仅在将 sourceSets 与其他 ABI 的库一起使用时支持 x86 ABI的主要内容,如果未能解决你的问题,请参考以下文章

如何设计一个仅在其中一个部分使用 CUDA 的库,以便其他部分在没有安装 CUDA 的情况下也可以工作?

g++ 版本兼容性

Debian Buster 中的库不匹配?

为 C++ 库创建一个 c 包装器

KMM : 如何解决不兼容的 abi 版本。当前默认为“1.4.2”,找到“1.5.0”。 1.5.20编译器产生的库?

尽管在 CMake 中指定了库,但未定义的引用错误(与 libtorch 链接的问题(C++11 ABI?)