Android Studio中so文件用途及MNN库头文件引入问题咨询
解答
关于so文件的用途
.so文件是Android平台下的动态链接库,它不包含头文件,仅存储编译后的二进制机器码(即API的具体实现逻辑)。头文件的作用是给C++代码提供API声明,告诉编译器函数、类的名称、参数、返回值等规则;而so文件是这些声明对应的实际执行代码,会在程序运行时被加载调用。因此so本身不提供头文件,你需要单独获取MNN的头文件。
关于#include <MNN/expr/Module.hpp>的问题
这个语句不是从so文件中获取头文件的。C++中尖括号<>表示从系统/编译器指定的全局头文件搜索路径中查找文件,而引号""则优先从当前源代码所在目录查找。
要在你的项目中实现这个引入,需要完成以下步骤:
- 获取MNN头文件:从MNN源码中复制
include目录下的所有文件到你的项目中,比如放到src/main/cpp/include路径下。 - 修改CMakeLists.txt添加头文件路径:让编译器能找到MNN的头文件,添加如下代码:
# 添加MNN头文件搜索路径 include_directories(src/main/cpp/include)
- 在CMakeLists.txt中链接libMNN.so:指定动态库的位置并链接到你的原生库,添加如下代码:
# 声明导入MNN动态库 add_library(MNN SHARED IMPORTED) # 设置MNN动态库的路径 set_target_properties(MNN PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/../libs/arm64-v8a/libMNN.so) # 将MNN库链接到你的原生库(替换成你项目实际的原生库名称,比如native-lib) target_link_libraries(你的原生库名称 MNN)
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

