Android集成第三方动态库常见问题
问题1:not found libstdc++.so
第三方动态库依赖的动态库是libstdc++.so(readelf -d libduilite.so
),而不是libc++.so。HAL属于vendor,要使用system的动态库,会从VNDK或LLNDK中使用,但Android 8.1开始,从LLNDK库中移除了 libstdc++.so,已改用 libc++.so。某些版本的独立工具链可以将 -lstdc++ 添加到默认链接器标记中。如需停用默认设置,请将 -nodefaultlibs -lc -lm -ldl 添加到 LDFLAGS 中
问题2:提示动态库找不到(external/ecnr/lib64/libduilite.so not found
)
- 第三方动态库没有加
soname
(readelf -d libduilite.so
)导致的(0x000000000000000e (SONAME) Library soname: [libduilite.so]
)
问题3:整编时,提示Changing the VNDK library list is not allowed in API locked branches
```shell
Added VNDK-core: libduilite.so
error: VNDK library list has been changed.
Changing the VNDK library list is not allowed in API locked branches.
```
- 需要修改
build/make/target/product/vndk/28.txt
和build/make/target/product/vndk/current.txt
把out/target/product/msmnile_gvmq/obj/PACKAGING/vndk_intermediates/libs.txt
里面的内容拷贝到上面两个文件中去