Android NDK中sharedmem.h对应.so动态库位置及链接问题解决
报错根因
ASharedMemory_create 是Android NDK公开接口的导出符号,隶属于libandroid.so动态库,不存在独立的sharedmem.h专属动态库文件,此前定向查找独立共享内存库的方向存在偏差。
配置修正方案
- 基础环境校验
- 确保项目配置的minSdkVersion不低于26:
ASharedMemory系列API从Android 8.0(API Level 26)开始正式对外提供,低版本SDK下即便完成链接也无法匹配对应符号。 - 确保使用NDK r19及以上版本:过旧的NDK版本未将
android/sharedmem.h纳入公开头文件检索路径,会引发头文件找不到、符号未导出的连锁问题。
- 确保项目配置的minSdkVersion不低于26:
- CMake链接配置调整
找到CMakeLists.txt中对应可执行目标的target_link_libraries配置块,在原有链接列表中新增android库,示例配置如下:target_link_libraries(main # 原有已定位的NNAPI动态库保留 neuralnetworks # 新增此项,提供所有ASharedMemory系列API的符号实现 android ) - 代码头文件引入修正
不需要手动指定头文件搜索路径,按照NDK标准路径引入共享内存头文件即可:#include <android/sharedmem.h>
排查注意事项
- 配置完成后如果仍提示符号未定义,先检查CMake配置中的ABI筛选规则,确保编译目标(如arm64-v8a、armeabi-v7a)对应的NDK库路径下存在
libandroid.so文件,正常安装的NDK会内置该库,无需单独下载。 - 不要尝试添加不存在的
sharedmem、libsharedmem类伪库到链接列表,这类库在Android NDK生态中不存在,会引发新的链接错误。
内容的提问来源于stack exchange,提问作者JanosLim
相关产品推荐
相关产品推荐

