我需要在Android项目中使用from运行时库,但我不知道如何配置CMake,使其能够使用来自AAR的C++头和*.so。我创建了一个新的Android模块,并将onnxruntime-mobile-1.11.0.aar放入libs中,但是在我的C++代码中,我遇到了一个错误:
在/Users/ash/AndroidStudioProjects/cv-demo/android/src/nativelib/src/main/cpp/OrtInferenceSession.cpp:8: /Users/ash/AndroidStudioProjects/cv-demo/android/src/nativelib/src/main/cpp/OrtInferenceSession.hpp:20:10:致命错误包含的文件中:“onnxruntime_cxx_api.h”文件未找到
我看到我需要的文件都是用AAR包装的:

如何在onnxruntime-mobile-1.11.0.aar中指定headers、和*.so的路径,以便在C++代码中使用它们?
发布于 2022-10-03 12:52:37
我提取了libonnxruntime.so (不需要jni内容)和标题,并将它们放在src/旁边的一个新的libs/文件夹中。因此:
libs
└── onnxruntime
├── include
│ ├── cpu_provider_factory.h
│ ├── nnapi_provider_factory.h
│ ├── onnxruntime_c_api.h
│ ├── onnxruntime_cxx_api.h
│ └── onnxruntime_cxx_inline.h
└── lib
├── arm64-v8a
│ └── libonnxruntime.so
├── armeabi-v7a
│ └── libonnxruntime.so
├── x86
│ └── libonnxruntime.so
└── x86_64
└── libonnxruntime.so然后,我在CMakeList.txt中添加了这个库来链接库:
set(LIBS_DIR ${CMAKE_SOURCE_DIR}/../../../libs)
add_library(onnxruntime SHARED IMPORTED)
set_target_properties(
onnxruntime
PROPERTIES
IMPORTED_LOCATION ${LIBS_DIR}/onnxruntime/lib/${ANDROID_ABI}/libonnxruntime.so
INTERFACE_INCLUDE_DIRECTORIES ${LIBS_DIR}/onnxruntime/include
)最后,在gradle插件版本大于4.0的情况下,您必须在android部分的build.gradle中添加这些行
packagingOptions {
jniLibs {
pickFirsts += ['**']
}
}正式文件态
如果您正在使用Android插件4.0,请将导入的CMake目标使用的任何库移出您的jniLibs目录以避免此错误。
但在我的情况下,这还不够,还必须添加gradle配置以避免臭名昭著的2 files found with path 'lib/arm64-v8a/libonnxruntime.so' from inputs:错误。
https://stackoverflow.com/questions/71778195
复制相似问题