Android集成第三方动态库常见问题

 

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.txtbuild/make/target/product/vndk/current.txtout/target/product/msmnile_gvmq/obj/PACKAGING/vndk_intermediates/libs.txt 里面的内容拷贝到上面两个文件中去