FunASR ONNX Runtime 运行时中的 gflags 依赖:二进制安装、CMake 构建与集成实践
FunASR ONNX Runtime 运行时中的 gflags 依赖二进制安装、CMake 构建与集成实践【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR本文围绕 FunASR 仓库中 vendored 的 gflags 2.2.2 库的安装文档 INSTALL.md 展开完整覆盖其三种获取方式系统二进制包、CMake 源码构建、Bazel 外部依赖并逐条讲解 gflags 专有 CMake 配置项。读完后你将掌握在 Linux/Windows 上如何安装与编译 gflags以及为什么 FunASR 的 ONNX Runtime C 推理运行时 runtime/onnxruntime/CMakeLists.txt 能以add_subdirectory子项目方式直接内联构建它、而不需要预先独立安装。gflags 在 FunASR ONNX Runtime 中的位置gflags 是 Google 开源的 C 命令行参数库定义DEFINE_*宏、解析--flag参数、提供--help/--version等内建机制。在 FunASR 仓库中它被整体 vendored 到 runtime/onnxruntime/third_party/gflags与 glog、kaldi、openfst、yaml-cpp 等第三方库并列。从仓库的构建脚本结构可以确认它的依赖链runtime/onnxruntime/CMakeLists.txt 在ENABLE_FST开启时注释写明 fst depend on glog and gflags并执行add_subdirectory(third_party/gflags)同时把${gflags_BINARY_DIR}/include加入头文件搜索路径——即 gflags 是作为CMake 子项目随主工程一起构建的无需单独安装。runtime/onnxruntime/third_party/openfst/src/lib/CMakeLists.txt 中 openfst 库直接target_link_libraries(fst PUBLIC glog gflags)这是 gflags 最直接的消费者。runtime/onnxruntime/third_party/glog/CMakeLists.txt 以find_package(gflags 2.2.2)探测系统已有的 gflags用于WITH_GFLAGS场景找到时优先链接双冒号目标gflags::gflagsL523-L532。最终产物 runtime/onnxruntime/src/CMakeLists.txt 里共享库funasr的EXTRA_LIBS在 Windows 与 Unix 分支中均包含gflags。vendored 源码的版本可通过 runtime/onnxruntime/third_party/gflags/CMakeLists.txt 中的set (PACKAGE_VERSION 2.2.2)以及 ChangeLog.txt 顶部条目2018-11-11 发布 2.2.2交叉确认。方式一安装二进制分发包INSTALL.md 首先说明gflags 开发者官方不提供二进制分发包但操作系统或发行版可能维护二进制包建议查阅所用 Linux 发行版的软件包仓库。以 Debian/Ubuntu 为例可执行sudo apt-get install libgflags-dev适用场景是你在系统级别构建某个依赖 gflags 的工程例如 glog 以WITH_GFLAGSON走find_package路径由包管理器统一提供库与头文件。而 FunASR 仓库的 ONNX Runtime 运行时并不采用这一方式——它把源码放在third_party/gflags下随工程一起编译从而避免对系统环境产生硬依赖这也是 runtime/onnxruntime/readme.md 中构建步骤只要求下载 onnxruntime 与 ffmpeg 预编译包的原因。方式二用 CMake 从源码构建gflags ≥ 2.1INSTALL.md 指出自 2.1 版本起gflags 的构建系统基于 CMake。通用的构建、测试、安装步骤为解压源码文件创建 build 目录并进入运行 CMake 配置构建树用所选构建工具编译测试构建产物安装构建文件。在带有 GNU Make 的类 Unix 系统上这些步骤可归纳为以下 shell 命令序列其中$package和$version分别代表包名与软件版本的 shell 变量$ tar xzf gflags-$version-source.tar.gz $ cd gflags-$version $ mkdir build cd build $ ccmake ..ccmake交互过程中的要点按c配置构建系统按e忽略警告设置CMAKE_INSTALL_PREFIX及其他 CMake 变量与选项持续按c直到出现选项g按g生成 GNU Make 的配置文件。随后执行$ make $ make test (可选) $ make install (可选)版本前提FunASR 主工程 runtime/onnxruntime/CMakeLists.txt 要求 CMake ≥ 3.16而 gflags 自身 CMakeLists.txt 声明cmake_minimum_required (VERSION 3.0.2 FATAL_ERROR)因此在主工程环境下配置 gflags 不会有版本冲突。独立构建时的默认安装前缀CMAKE_INSTALL_PREFIX一般为 Unix 下的/usr/local、Windows 下的C:\Program Files\gflags。gflags 专有 CMake 配置项INSTALL.md 只文档化了 gflags 专有的构建/安装配置变量大部分面向高级用户与二进制包维护者通常无需修改完整继承如下表CMake 选项说明CMAKE_INSTALL_PREFIX安装目录Unix 上如/usr/localWindows 上如C:\Program Files\gflagsBUILD_SHARED_LIBS请求构建动态链接库BUILD_STATIC_LIBS请求构建静态链接库BUILD_SHARED_LIBS为 OFF 时隐含开启BUILD_PACKAGING启用基于 CPack 的二进制包生成BUILD_TESTING构建供 CTest 执行的测试BUILD_NC_TESTS请求纳入负向编译测试需要 PythonBUILD_CONFIG_TESTS请求纳入包配置测试需要 PythonBUILD_gflags_LIBS请求构建多线程 gflags 库需找到线程库BUILD_gflags_nothreads_LIBS请求构建单线程 gflags 库GFLAGS_NAMESPACEgflags 库使用的 C 命名空间。公开头文件安装到以该命名空间命名的子目录。为兼容 Google Commandline Flags可设为google默认值为gflagsGFLAGS_INTTYPES_FORMAT标识内建整数类型格式的字符串GFLAGS_INCLUDE_DIR相对CMAKE_INSTALL_PREFIX的头文件安装目录名LIBRARY_INSTALL_DIR相对CMAKE_INSTALL_PREFIX的库安装目录名INSTALL_HEADERS请求安装公开头文件结合 runtime/onnxruntime/third_party/gflags/CMakeLists.txt 中的gflags_define宏调用可以进一步看到这些选项的默认值在独立项目与子项目两种模式下的差异宏签名为gflags_define(type name doc 独立默认 子项目默认)选项独立构建默认子项目默认BUILD_SHARED_LIBSOFFOFFBUILD_STATIC_LIBSOFFONBUILD_gflags_LIBONOFFBUILD_gflags_nothreads_LIBONONBUILD_PACKAGING/BUILD_TESTINGOFFOFFINSTALL_HEADERSONOFFINSTALL_STATIC_LIBSONOFF这意味着 FunASR 以子项目方式引入时默认只构建单线程静态库gflags_nothreads_static且不执行安装——对推理运行时而言这恰好合适产物静态链接进funasr.so/DLL减少部署时需要随附的动态库。同时 CMakeLists.txt 强制校验BUILD_gflags_LIB与BUILD_gflags_nothreads_LIB至少一项为 ON否则FATAL_ERROR。命名空间方面源码 L150 中NAMESPACE的独立构建默认为google;gflags保留google命名空间别名以维持与 2.0 及更早版本的二进制 ABI 兼容子项目默认仅gflags。这正是 glog、openfst 等历史代码可以沿用#include gflags/gflags.h与google命名空间写法的原因。构建导出目标上2.2.2 起 CMake 导出目标带gflags::前缀见 ChangeLog.txt 中 2.2.2 条目说明未带前缀的旧目标名仍被保留兼容glog 的 CMake 代码中即采用了先探测gflags::gflags、回退到gflags的双目标写法。方式三在 Bazel 工程中作为外部依赖INSTALL.md 还给出 Bazel 用法在WORKSPACE文件中把 gflags 映射为外部依赖git_repository( name com_github_gflags_gflags, commit INSERT COMMIT SHA HERE, remote https://github.com/gflags/gflags.git, )然后在cc_binary或cc_library规则的deps段添加com_github_gflags_gflags//:gflags并在源码中#include gflags/gflags.h即可。vendored 源码根目录下的 WORKSPACE 文件也印证了 gflags 自身支持 Bazel 构建。FunASR 运行时目前使用 CMake 组织构建见 runtime/onnxruntime/readme.md 的cmake .. make流程Bazel 方案适用于自研工程选择 Bazel 作为构建系统时的接入参考。构建后的测试与验证独立构建 gflags 时make test由BUILD_TESTING控制会通过 CTest 执行仓库内 test/CMakeLists.txt 定义的测试集覆盖面相当完整--help/--helpshort/--helpfull/--helpon/--helpmatch/--helpxml等帮助输出的逐条断言--version、--flagfile、--fromenv/--tryfromenv、--undefok、--dashdash等参数机制的行为测试跨编译单元的gflags_declare_test验证gflags_declare.h声明/定义分离机制BUILD_NC_TESTS下的负向编译测试test/nc/CMakeLists.txt需要 Python通过find_package(gflags REQUIRED)故意以错误方式引用库并期望编译失败与BUILD_CONFIG_TESTS下的包配置测试test/config/CMakeLists.txt。需要说明的是FunASR 主工程在引入 glog 前显式关闭了BUILD_TESTINGruntime/onnxruntime/CMakeLists.txt 中set(BUILD_TESTING OFF)且子项目模式下 gflags 的测试默认即为 OFF因此运行时构建过程不会编译这些测试目标。小结在 FunASR 的 ONNX Runtime C 运行时中gflags 2.2.2 以 vendored 子项目形式参与构建被 openfst 与 glog 间接消费最终静态链接进funasr共享库。INSTALL.md 提供的三种获取途径各有适用面系统二进制包如sudo apt-get install libgflags-dev——适合系统级独立构建官方本身不发布二进制CMake 源码构建——tar → ccmake → make → make test → make install标准流程配合 gflags 专有 CMake 选项命名空间、线程模型、静态/动态库选择精细控制产物形态Bazelgit_repository外部依赖——适合 Bazel 工程按 commit 锁定版本接入。理解子项目默认值默认仅构建gflags_nothreads静态库、不安装、命名空间默认gflags是排查 FunASR 运行时构建中 gflags 相关问题的关键它决定了为什么third_party/gflags不需要预先执行make install以及为什么各依赖库可以直接引用gflags::gflags/gflags目标完成链接。【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务

FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务

FunASR 运行时:自行生成 SSL 证书并启用 WSS 加密的流式语音识别服务 【免费下载链接】FunASR Open-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP ser…

2026/9/13 18:29:36 阅读更多 →
Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案

Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案

Zulip 的 Slack 兼容 Incoming Webhook:从 Slack 迁移集成的零改造接入方案 【免费下载链接】zulip Zulip server and web application. Open-source team chat that helps teams stay productive and focused. 项目地址: https://gitcode.com/GitHub_Trending/zu…

2026/9/13 18:29:36 阅读更多 →
蓝桥杯Python字符串处理与F串问题解析

蓝桥杯Python字符串处理与F串问题解析

1. 蓝桥杯Python研究生组赛题解析背景作为一名参加过多次蓝桥杯赛事并担任过校队指导的选手,我深知研究生组题目的独特挑战性。第十六届省赛的F串问题看似简单,实则暗藏玄机,非常考验选手对Python字符串处理的深入理解和算法优化能力。蓝桥杯…

2026/9/13 18:29:36 阅读更多 →

最新新闻

高频交易核心技术:Level2行情与LDP系统实战解析

高频交易核心技术:Level2行情与LDP系统实战解析

1. 项目概述:高频交易工具链解析"0.2毫秒抢涨停"这个标题背后,隐藏着一套专业级量化交易工具链的组合应用。作为在证券IT领域深耕多年的从业者,我将拆解Level2行情、LDP极速交易系统和VIP通道这三项核心技术的协同工作机制。这套组…

2026/9/13 19:17:58 阅读更多 →
嵌入式面试真题复盘:从硬件感知力到技术叙事力的工程能力验证

嵌入式面试真题复盘:从硬件感知力到技术叙事力的工程能力验证

1. 这不是“八股文合集”,而是一份嵌入式工程师面试现场的实时复盘手记我带过三届校招面试,也作为候选人走过华为、大疆、地平线、蔚来、汇川技术的嵌入式岗位终面流程。2025年Q1起,我系统性地跟踪了37家头部企业(含芯片原厂、智能…

2026/9/13 19:17:58 阅读更多 →
refine Inferencer 实战:在 Ant Design + react-router 项目中基于 API 响应自动生成资源页面

refine Inferencer 实战:在 Ant Design + react-router 项目中基于 API 响应自动生成资源页面

refine Inferencer 实战:在 Ant Design react-router 项目中基于 API 响应自动生成资源页面 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://…

2026/9/13 19:17:58 阅读更多 →
AI科研绘图实战:从零基础到专业级论文配图

AI科研绘图实战:从零基础到专业级论文配图

写论文最痛苦的事情,其实不是数据跑不出来,也不是文献读不完,而是图表怎么画都“差点意思”。我见过太多科研人,实验结果非常漂亮,结果配图一放上去,直接拉低整个论文的档次。早些年大家还在硬啃 Illustrat…

2026/9/13 19:17:58 阅读更多 →
GoFr 远程动态调整日志级别:免重启的运行时 Log Level 热更新方案

GoFr 远程动态调整日志级别:免重启的运行时 Log Level 热更新方案

GoFr 远程动态调整日志级别:免重启的运行时 Log Level 热更新方案 【免费下载链接】gofr An opinionated GoLang framework for accelerated microservice development. Built in support for databases and observability. 项目地址: https://gitcode.com/GitHub…

2026/9/13 19:17:58 阅读更多 →
LunaTranslator 视觉小说实时翻译完整指南:3 种文本捕获模式 5 步上手

LunaTranslator 视觉小说实时翻译完整指南:3 种文本捕获模式 5 步上手

LunaTranslator 视觉小说实时翻译完整指南:3 种文本捕获模式 5 步上手 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator LunaTranslator 是一款运行在 Windows …

2026/9/13 19:16:57 阅读更多 →

日新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/13 0:00:24 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/13 0:00:24 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/13 0:00:24 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/13 16:51:11 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/12 18:29:34 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/12 19:02:44 阅读更多 →