根据Android NDK文档(https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#STL)。
如果使用共享变体,则APK中必须包括libc++_shared.so。
因此,作为CMake安装的一部分,如果CMAKE_ANDROID_STL_TYPE
等于c++_shared
,我希望在CMake安装期间安装libc++_shared.so
。
我尝试使用install(RUNTIME_DEPENDENCY_SET
,但它似乎不适用于Android版本。CMake 3.27
请注意,文件(GET_RUNTIME_DEPENDENCIES)仅支持收集Windows、Linux和macOS平台的运行时依赖项,因此install(RUNTIME_DEPENDENCY_SET)具有相同的限制。
我有一个解决方案,涉及一个python脚本来为我正在编译的ABI找到合适的libc++_shared.so
。但我希望有个更好的解决方案。
1条答案
按热度按时间plicqrtu1#
以下是我提出的解决方案:
注意事项:
abis.json
被解析以获得三元组,因为CMake Android工具链不提供它。该方法足够稳健以处理未来的ABI。string(JSON
,因此至少需要CMake3.19
CMAKE_SYSROOT
由android工具链设置到适当的位置支持文档:
abis.json
让我们可以查询基于CMAKE_ANDROID_ARCH_ABI
的三元组<NDK>/sysroot/usr/lib/<triple>
。”字符串
编辑:
似乎目前惯用的答案是使用Android Gradle插件来为您处理此问题。
链接到与Android NDK开发人员的相关对话:https://github.com/android/ndk/issues/1905
因此,上述代码仅在您不想使用Android Gradle插件时才有用。