889|0

66

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

《Cmake构建实战》4 onnxruntime的查找模块实践 [复制链接]

本帖最后由 maskmoo 于 2024-11-3 18:21 编辑

1 onnxruntime模块配置

onnxruntime是微软开发的一个机器学习推理和训练的加速库。onnxruntime本身并没有提供用于导入依赖的Cmake配置文件,因此需要自行实现一个用于查找onnxruntime的查找模块Findonnxruntime.cmake。查找模块主要完成对onnxruntime库的头文件/库文件的路径和库版本号等参数的查找。

首先下载onnxruntime预编译包,

链接已隐藏,如需查看请登录或者注册
,我这里选择的是onnxruntime-win-x64-1.20.0版本。

 

解压文件,可以发现库文件夹中主要包含头文件include目录和库文件lib两个文件夹组成.

 

查找脚本编写,查找脚本将环境变量onnxruntime_ROOT作为候选路径,通过find_path find_library以及find_file命令分别查找头文件和库文件的路径以及库版本信息。

最用采用FindPackageHandleStandardArgs模块来进行检查。

find_path(onnxruntime_INCLUDE_DIR onnxruntim e_c_api.h
  HINTS ENV onnxruntime_ROOT
  PATH_SUFFIXES include)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

find_library(onnxruntime_LIBRARY
  NAMES onnxruntime
  HINTS ENV onnxruntime_ROOT
  PATH_SUFFIXES lib)

find_file(onnxruntime_VERSION_FILE VERSION_NUMBER
  HINTS ENV onnxruntime_ROOT)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
if(onnxruntime_VERSION_FILE)
  file(STRINGS ${onnxruntime_VERSION_FILE} onnxruntime_VERSION LIMIT_COUNT 1)
endif()

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(onnxruntime 
  REQUIRED_VARS onnxruntime_LIBRARY onnxruntime_INCLUDE_DIR 
  VERSION_VAR onnxruntime_VERSION
                                                                                              )

if(onnxruntime_FOUND)
  set(onnxruntime_INCLUDE_DIRS ${onnxruntime_INCLUDE_DIR})
  set(onnxruntime_LIBRARIES ${onnxruntime_LIBRARY})
 
  add_library(onnxruntime::onnxruntime SHARED IMPORTED)
  target_include_directories(onnxruntime::onnxruntime INTERFACE ${onnxruntime_INCLUDE_DIRS})
  if(WIN32)
    set_target_properties(onnxruntime::onnxruntime PROPERTIES 
      IMPORTED_IMPLIB "${onnxruntime_LIBRARY}")
  else()
    set_target_properties(onnxruntime::onnxruntime PROPERTIES 
      IMPORTED_LOCATION "${onnxruntime_LIBRARY}")
  endif()
endif()

2 在目录程序CmakeList.txt文件中引用配置

首先向set(CMAKE_MODULE_PATH 插入当前目录,方便寻找当前文件夹下的脚本文件。以及设置onnxruntime_ROOT目录;最终通过find_package命令真正开始查找onnxruntime库。

cmake_minimum_required(VERSION 3.20)
project(find-onnxruntime)

set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR};${CMAKE_MODULE_PATH}")
set(CMAKE_CXX_STANDARD 11) # 设置C++标准为11
set(onnx_version 1.20.0) # 根据下载的版本进行设置,本例使用1.10.0版本

# 请下载onnxruntime库的压缩包,并解压至该目录中
if("$ENV{ }" STREQUAL "")
  if(WIN32)
      set(ENV{onnxruntime_ROOT} "${CMAKE_CURRENT_LIST_DIR}/onnxruntime-win-x64-${onnx_version}")
  elseif(APPLE)
      set(ENV{onnxruntime_ROOT} "${CMAKE_CURRENT_LIST_DIR}/onnxruntime-osx-universal2-${onnx_version}")
  else()
      set(ENV{onnxruntime_ROOT} "${CMAKE_CURRENT_LIST_DIR}/onnxruntime-linux-x64-${onnx_version}")
  endif()
endif()

find_package(onnxruntime 1.20) # 指定依赖的最小版本
add_executable(main main.cpp)
target_link_libraries(main onnxruntime::onnxruntime)
target_compile_definitions(main PRIVATE ORT_NO_EXCEPTIONS)

添加主程序引用onnxruntime库中的函数,用来测试证明onnxruntime库已经被成功链接到主程序中了。

 

#include <onnxruntime_cxx_api.h>

int main() {
    Ort::Env env;
    Ort::Session session(env, ORT_TSTR(""), Ort::SessionOptions(nullptr));
    return 0;
}

3 配置测试

执行配置命令行,可以发现已经可以查找到onnxruntime库。  

mkdir build

cd build
cmake ..

 

执行cmake --build . 命令进行编译,编译完成后将onnxruntime.dll拷贝到Findonnxruntime\build\Debug下执行main.exe,执行结果输出了一条错误信息,表明onnxruntime库已经被成功链接到主程序中了。

 

 

 

 

 

 

 

点赞 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表