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

Bazel构建依赖{fmt}动态库的C++项目报错,求解决方案

问题解决方案

错误原因

  • cc_import中shared_library字段使用相对路径libfmt.so,Bazel会在当前main包目录下查找该文件,但实际系统动态库位于/usr/lib64,导致文件找不到
  • cc_binary中额外添加linkopts = ["-lfmt"]属于冗余配置,会干扰Bazel的依赖管理逻辑

正确修改方案

1. 修正cc_import配置

通过绝对路径指定系统动态库位置,同时配置头文件路径确保编译时能找到fmt的头文件:

cc_import(
    name = "fmt",
    hdrs = glob(["/usr/include/fmt/*.h"]),  # 引入系统中fmt的头文件集合
    shared_library = "/usr/lib64/libfmt.so",  # 指定系统动态库的绝对路径
    visibility = ["//visibility:public"],
)

2. 简化cc_binary配置

移除冗余的linkopts配置,让Bazel通过依赖链自动处理链接逻辑:

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [":lib"],
    linkstatic = 0,
)

完整修改后的BUILD文件

cc_import(
    name = "fmt",
    hdrs = glob(["/usr/include/fmt/*.h"]),
    shared_library = "/usr/lib64/libfmt.so",
    visibility = ["//visibility:public"],
)

cc_library(
    name = "lib",
    hdrs = ["lib.hpp"],
    srcs = ["lib.cc"],
    deps = [":fmt"],
    visibility = ["//visibility:public"],
    linkstatic = 0,
)

cc_binary(
    name = "main",
    srcs = ["main.cc"],
    deps = [":lib"],
    linkstatic = 0,
)

验证构建

执行以下命令重新构建:

bazel build //main:main

运行生成的二进制文件:

./bazel-bin/main/main

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:24:10