Native工程导入库以及编译的时候,遇到找不到库文件或者引用的函数符号。
报错日志参考如下:
Cause: Can't find any .so file in the xxx
CMake Error at CMakeLists.txt:XXX (find_package): find a package configuration file provided by XXX but it set XX_FLAG to false so package is considered to be NOT FOUND
HarmonyOS上使用DevEco Studio模板构建NDK工程,其核心编译过程如下:
根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake,按照makefile执行编译和链接,将生成的.so以及运行时依赖的.so同步到输出目录,完成构建过程。
当遇到编译找不到SO文件的时候,需要做以下几个方向的排查:
$ llvm-readelf -d xxx.so Dynamic section at offset 0xad00a0 contains 31 entries: Tag Type Name/Value 0x000000000000001d (RUNPATH) Library runpath: [$ORIGIN/../../../mapi/shared-glapi:/xxx/ohos-sdk/thirdparty/libxxx:/xxx/ohos-sdk/hiviewdfx/hilog] 0x0000000000000001 (NEEDED) Shared library: [libglapi.so.0] 0x0000000000000001 (NEEDED) Shared library: [libz.so] 0x0000000000000001 (NEEDED) Shared library: [libhilog.so] 0x0000000000000001 (NEEDED) Shared library: [libc++_shared.so] 0x0000000000000001 (NEEDED) Shared library: [libc.so] 0x000000000000000e (SONAME) Library soname: [libaaa.so]