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

原CMake项目转Bazel构建动态库:.c文件包含.c文件配置问题

Bazel编译动态库处理.c文件包含的解决方案

你的问题核心是:代码中通过宏定义包裹直接包含.c文件,这种写法在Bazel中需要避免被包含的.c文件被重复编译。具体解决步骤如下:

  • 核心原则:被#include的ABC.c不能出现在任何cc_*规则的srcs字段中,否则会被Bazel单独编译,导致符号重复定义错误。只有包含它的那个.c文件(比如叫wrapper.c)需要放进srcs。
  • 使用cc_shared_library编译动态库(Bazel 5.0+推荐,旧版本可用cc_binary加linkshared=True):
cc_shared_library(
    name = "my_dynamic_lib",
    srcs = ["wrapper.c"],  # 这里放包含ABC.c的那个文件
    # 如果ABC.c不在当前目录,添加包含路径
    includes = ["path/to/directory_containing_ABC"],
    # 或者通过编译选项指定头文件路径
    # copts = ["-Ipath/to/directory_containing_ABC"],
)
  • 额外注意:检查项目中所有其他Bazel规则,确保ABC.c没有被加入任何srcs列表,彻底避免重复编译的可能。

如果不想修改现有代码结构,以上就是最直接的适配方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:37:09