You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bazel引入本地非Bazel构建C++ OpenVINO库时出现头文件找不到错误

问题根因与修复步骤

你的配置存在3个核心错误,按以下步骤修改即可解决头文件找不到的问题:

1. 拆分外部库与自有代码的BUILD配置

你当前把OpenVINO外部库的编译规则和自有项目的main_c、libbackend.dll规则写在同一个backend/cpp/BUILD文件里,完全混淆了外部仓库和主项目的文件边界。new_local_repository规则要求你单独提供一个给外部库使用的BUILD文件,这个文件里的所有相对路径都是基于你指定的OpenVINO本地根目录解析的。

  • 首先在主项目根目录新建third_party文件夹,在里面新建openvino.BUILD文件,专门存放OpenVINO的库规则
  • 修改WORKSPACE中的new_local_repository配置,指向这个单独的BUILD文件:
new_local_repository(
    name = "openvino",
    build_file = "//third_party:openvino.BUILD",
    path = "C:\\Users\\user\\OpenVINO2022.1.0.dev20220316_OMP\\openvino",
)

2. 修正OpenVINO库的BUILD规则

编辑刚才新建的third_party/openvino.BUILD,注意3个要点:不要把运行时dll放到编译源文件里、头文件glob要包含.h后缀、include路径要和头文件引用方式匹配:

cc_library(
    name = "openvino",
    srcs = glob(["**/*.lib"]), # 仅放链接阶段需要的.lib导入库,dll是运行时依赖不需要放这里
    hdrs = glob(["**/*.hpp", "**/*.h"]), # 补充.h后缀的头文件匹配
    # 路径配到openvino头文件目录的上一级,匹配标准的openvino/openvino.hpp引用格式
    # 注意先去你本地OpenVINO目录核对实际路径,部分编译版本头文件在runtime/include下,不是src/inference/include
    includes = ["src/inference/include"],
    visibility = ["//visibility:public"],
)

3. 给自有代码添加OpenVINO依赖,修正头文件引用

你当前的main_c目标没有声明对OpenVINO库的依赖,编译器根本不会把OpenVINO的头文件路径加进搜索目录。

  • 编辑backend/cpp/BUILD,给main_c加上OpenVINO依赖:
cc_library(
    name = "main_c",
    srcs = ["main_c.cc"],
    hdrs = ["utils.h"],
    deps = [
        "//flutter/cpp/c:headers",
        "@openvino//:openvino", # 新增OpenVINO依赖
    ],
    alwayslink = 1,
    visibility = ["//visibility:public"]
)

cc_binary(
    name = "libbackend.dll",
    linkshared = 1,
    win_def_file = "//flutter/cpp/c:dll_export.def",
    deps = [
        "@openvino//:openvino",
        ":main_c",
    ],
    linkopts = ["-shared"],
)
  • 修改main_c.cc里的头文件引用,把Windows反斜杠换成正斜杠(避免转义问题),路径和include配置匹配:
#include "openvino/openvino.hpp"

额外注意事项

  • 先去本地OpenVINO路径下核对头文件、lib文件的实际存放位置,不要直接照搬写死的路径,如果你的编译版本头文件存放在runtime/include目录,就把openvino.BUILD里的includes改成对应路径。
  • 确保你Bazel编译用的架构(x64/x86)、编译模式(Debug/Release)和本地编译的OpenVINO库完全匹配,否则编译通过后运行也会出现段错误、符号找不到的问题。
  • 运行生成的二进制前,把OpenVINO相关dll所在目录加到系统PATH里,或者把dll复制到libbackend.dll同目录,避免运行时找不到动态库。

内容的提问来源于stack exchange,提问作者Manasa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:57:25