集成libturbojpeg.so 3.0.2后ndk-build执行clean时报“LOCAL_SRC_FILES指向缺失文件”的问题咨询
集成libturbojpeg.so 3.0.2后ndk-build执行clean时报“LOCAL_SRC_FILES指向缺失文件”的问题咨询
我最近把libjpeg-turbo从1.5.0升级到3.0.2,尝试将libturbojpeg.so集成到Android Studio项目中,使用ndk-build进行构建。但在执行ndkClean或ndk-build.cmd clean时,构建流程失败,报错信息如下:
Android NDK: ERROR: /UVCCamera/Android.mk:turbojpeg: LOCAL_SRC_FILES points to a missing file
Android NDK: Check that /libs/armeabi-v7a/libturbojpeg.so exists or that its path is correct
尽管我已经将libturbojpeg.so放到了对应的libs/armeabi-v7a/和libs/arm64-v8a/目录中,构建仍然会失败。而且只有当所有ABI版本的.so文件都存在时,清理流程才不会报错——哪怕当前构建只针对单个ABI目标。手动复制.so文件时集成能正常工作,但除非所有ABI的.so文件都齐全,否则清理过程必然失败。
环境信息
- libjpeg-turbo版本:3.0.2
- NDK版本:23.1.7779620
- Android Studio版本:Hedgehog | Chipmunk
- Gradle插件:7.x
- 构建系统:通过Gradle的
externalNativeBuild.ndkBuild调用ndk-build - 目标ABI:armeabi-v7a 和 arm64-v8a
- minSdkVersion:21
复现步骤
- 使用CMake为armeabi-v7a和arm64-v8a构建libturbojpeg.so
- 将.so文件放入对应的
libs/<ABI>/目录中 - 在Android.mk中声明:
LOCAL_SRC_FILES := ../../libs/$(TARGET_ARCH_ABI)/libturbojpeg.so - 执行
ndk-build.cmd clean或./gradlew clean - 若任意一个ABI的.so文件缺失,就会触发报错
预期行为
ndkClean不应因为仅构建选中的APP_ABI而失败;或者如果当前ABI不需要某个.so文件,应该提供更清晰的降级机制。
临时解决方法
- 手动将.so文件复制到所有ABI目录中,哪怕当前不针对该ABI进行构建
- 或者在Application.mk中临时将APP_ABI限制为单个目标
咨询请求
能否帮忙确认以下几个问题:
- 这种行为是有意设计的吗?
- 有没有更简洁的方式集成预构建的.so文件,避免因未使用的ABI对应的.so文件缺失而触发LOCAL_SRC_FILES错误?
- 能否为Android预构建使用场景提供一个默认的cmake + ndk-build集成示例?
非常感谢你们开发了这款快速且稳定的JPEG库!
内容来源于stack exchange
相关产品推荐
相关产品推荐

