在IDE里面创建的带CPP模块的工程,NDK通过CMake和Ninja编译应用的C/C++代码,编译过程如下图所示。核心编译过程如下:根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake。执行Ninja,按照makefile执行编译和链接,将生成的.so以及运行时依赖的.so同步到输出目录,完成构建过程。通过DevEco Studio提供的应用模板,可以快速生成CMake构建脚本模板,并在build-profile.json5中指定相关编译构建参数。这种找不到动态库的问题应该是so没有被打包到app中。要确保在模块的libs目录下有没有对应so,在src的cpp配置中有没有正确的配置:oh-package.json5中配置动态库名称: { "name": "libxxx.so", "types": "./index.d.ts", "version": "", "description": "Please describe the basic information." }index.d.ts中配置c++对外暴露接口:export const add: (num1: number, num2: number) => void;
在IDE里面创建的带CPP模块的工程,NDK通过CMake和Ninja编译应用的C/C++代码,编译过程如下图所示。
核心编译过程如下:根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake。执行Ninja,按照makefile执行编译和链接,将生成的.so以及运行时依赖的.so同步到输出目录,完成构建过程。通过DevEco Studio提供的应用模板,可以快速生成CMake构建脚本模板,并在build-profile.json5中指定相关编译构建参数。
这种找不到动态库的问题应该是so没有被打包到app中。
要确保在模块的libs目录下有没有对应so,在src的cpp配置中有没有正确的配置:
oh-package.json5中配置动态库名称:
index.d.ts中配置c++对外暴露接口: