Ubuntu下使用CMake编译Android armeabi-v7a共享库遇NDK无android-26 API错误
报错原因
你使用的NDK r23b版本已经移除了传统platforms目录下各API级别独立存放的目录结构,改为统一的头文件/库路径适配不同API级别,CMake按照旧逻辑查找android-26目录自然会失败。
解决方案
你可以选以下任意一种方式解决:
- 优先使用NDK内置的CMake工具链配置,无需自己手动编写toolchain.cmake的系统参数。编译时直接指定对应参数即可:
内置工具链会自动适配NDK的新路径规则,不会触发旧目录查找逻辑。cmake .. \ -DCMAKE_TOOLCHAIN_FILE=/home/user/android-ndk-r23b/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=armeabi-v7a \ -DANDROID_API_LEVEL=26 \ -DANDROID_STL=c++_shared - 如果你需要保留自定义的toolchain.cmake文件,在原有配置中新增一行即可:
该参数会强制CMake使用NDK新版本的统一路径查找逻辑,跳过对set(CMAKE_ANDROID_NDK_DEPRECATED_HEADERS OFF)platforms下独立API目录的检查。 - 如果你需要兼容旧项目配置,也可以将NDK版本降级到r22及更早版本,这类版本仍保留了
platforms下各API级别的独立目录,可直接适配你现有的配置。
注意:修改配置后需要删除之前生成的build缓存目录,重新执行CMake生成和编译流程才能生效。
内容的提问来源于stack exchange,提问作者pol2095
相关产品推荐
相关产品推荐

