HarmonyOS鸿蒙Next中编译构建onnxrumtime共享库,但运行失败
HarmonyOS鸿蒙Next中编译构建onnxrumtime共享库,但运行失败
- 在
tpc_c_cplusplus-fix_other/lycium
中,运行./build.sh onnxruntime
配置信息:tpc_c_cplusplus-fix_other/thirdparty/onnxruntime/HKPBUILD
build() {
cd $builddir/$ARCH-build
${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@"
-DOHOS_ARCH=$ARCH -DCMAKE_ASM_FLAGS="-Wno-unused-command-line-argument" \
-DCMAKE_C_FLAGS="-Wno-unused-command-line-argument" \
-DCMAKE_CXX_FLAGS="-Wno-unused-command-line-argument -Wno-shorten-64-to-32" \
-Donnxruntime_ENABLE_CPU_FP16_OPS=OFF -DCPUINFO_BUILD_PKG_CONFIG=OFF -DBUILD_TESTING=OFF -DBUILD_GMOCK=OFF -Dprotobuf_USE_EXTERNAL_GTEST=OFF \
-Donnxruntime_ENABLE_CPUINFO=OFF -Donnxruntime_BUILD_UNIT_TESTS=OFF -Donnxruntime_CROSS_COMPILING=ON -Donnxruntime_BUILD_SHARED_LIB=ON ../cmake/ -L > `pwd`/build.log 2>&1
# 编译
make VERBOSE=1 >> `pwd`/build.log 2>&1
ret=$?
cd $OLDPWD
return $ret
}
- 测试代码
#include <iostream>
#include <vector>
#include <onnxruntime_cxx_api.h>
ctc_vad_callback eventCallbackFunc;
void validateONNXRuntime() {
try {
// 创建 ONNX Runtime 环境
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ONNXRuntimeTest");
// 创建会话选项
Ort::SessionOptions session_options;
session_options.SetIntraOpNumThreads(1);
session_options.SetInterOpNumThreads(1);
// 用于验证库是否加载成功的简单测试
std::cout << "ONNX Runtime 版本:" << OrtGetApiBase()->GetVersionString() << std::endl;
// 创建一个示例张量
std::vector<int64_t> input_shape = {1, 3};
std::vector<float> input_tensor_values = {1.0f, 2.0f, 3.0f};
Ort::MemoryInfo memory_info = Ort::MemoryInfo::CreateCpu(
OrtAllocatorType::OrtArenaAllocator,
OrtMemType::OrtMemTypeDefault
);
Ort::Value input_tensor = Ort::Value::CreateTensor<
float>(
memory_info,
input_tensor_values.data(),
input_tensor_values.size(),
input_shape.data(),
input_shape.size()
);
std::cout << "ONNX Runtime 库验证成功!" << std::endl;
}
catch (const Ort::Exception& e) {
std::cerr << "ONNX Runtime 验证失败:" << e.what() << std::endl;
}
}
注:include 文件在 tpc_c_cplusplus-fix_other/thirdparty/onnxruntime/onnxruntime-1.18.2/include/onnxruntime/core/session
中
onnxruntime_c_api.h
onnxruntime_cxx_api.h
onnxruntime_cxx_inline.h
onnxruntime_float16.h
以上测试代码在 macOS 环境,使用 macOS 的 onnxruntime 共享库运行正常,但在鸿蒙测试手机中,运行 Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ONNXRuntimeTest")
便会提示空指针。
大家有在鸿蒙环境下正常使用 onnxruntime 共享库的吗?求助。
更多关于HarmonyOS鸿蒙Next中编译构建onnxrumtime共享库,但运行失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如何编译onnxruntime这个库啊,能指点下吗?
更多关于HarmonyOS鸿蒙Next中编译构建onnxrumtime共享库,但运行失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
楼主方便提供下具体的报错日志吗?
在HarmonyOS鸿蒙Next中编译构建ONNX Runtime共享库时,运行失败可能涉及以下几个原因:
-
依赖库缺失或不兼容:ONNX Runtime依赖于多个第三方库,如Protobuf、Eigen等,这些库在鸿蒙系统中的版本可能与ONNX Runtime的要求不匹配。
-
编译器或工具链问题:鸿蒙Next使用的编译器和工具链可能与ONNX Runtime的构建配置不兼容,导致生成的共享库无法正常运行。
-
系统API差异:鸿蒙系统的API与Linux、Android等系统存在差异,ONNX Runtime中可能使用了鸿蒙系统不支持的系统调用或API。
-
权限问题:鸿蒙系统对应用的权限管理较为严格,共享库的加载和执行可能需要特定的权限,未正确配置可能导致运行失败。
-
内存管理问题:鸿蒙系统的内存管理机制与其他系统不同,ONNX Runtime中可能存在内存分配或释放不当的代码,导致运行时崩溃。
-
符号冲突:在鸿蒙系统中,可能存在与ONNX Runtime中定义的符号冲突,导致链接或运行时错误。
解决方法包括检查依赖库版本、调整编译器和工具链配置、修改系统调用或API使用、配置正确的权限、优化内存管理代码以及避免符号冲突。
在HarmonyOS鸿蒙Next中编译构建ONNX Runtime共享库时,若运行失败,可能原因包括:
- 依赖缺失:确保所有依赖库已正确安装,且版本兼容。
- 环境配置:检查环境变量是否配置正确,如
LD_LIBRARY_PATH
。 - 编译器选项:确认编译选项(如
-fPIC
)已启用,以适应共享库构建。 - 权限问题:确保运行时具有足够的权限访问库文件。
- 版本冲突:检查是否存在与鸿蒙系统或其他库的版本冲突。
建议逐一排查上述问题,并根据错误日志调整配置。