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

使用rules_foreign_cc时cmake目标无法找到依赖的configure_make编译的libpcap

解决方案

你遇到的问题是rules_foreign_cc不会自动将依赖的头文件、库路径注入到下游CMake的查找逻辑中,需要手动指定FindPCAP模块的查找参数。

修改BUILD配置如下

load("@rules_foreign_cc//foreign_cc:defs.bzl", "cmake", "configure_make")

configure_make(
    name = "libpcap",
    lib_source = "@libpcap//:all_srcs",
    out_libs = ["libpcap.a"],
    visibility = ["//visibility:public"],
)

cmake(
    name = "libtins",
    lib_source = "@libtins//:all_srcs",
    deps = [":libpcap"],
    cache_entries = {
        # DEP_<依赖名大写>_PREFIX是rules_foreign_cc自动注入的变量,指向依赖的安装根目录
        "PCAP_INCLUDE_DIR": "${DEP_LIBPCAP_PREFIX}/include",
        "PCAP_LIBRARY": "${DEP_LIBPCAP_PREFIX}/lib/libpcap.a",
    },
)

配置说明

  • rules_foreign_cc对每个声明在deps中的依赖,会自动注入格式为DEP_<依赖名大写>_PREFIX的环境变量,指向该依赖构建完成后的安装根目录,目录下会有标准的include头文件目录和lib库文件目录
  • 这里通过cache_entries参数将路径直接传递给CMake的FindPCAP模块对应的变量,跳过系统路径查找逻辑,直接使用你本地编译的libpcap

异常排查

如果还是出现找不到的错误,可按以下方向调整:

  • 若需要链接动态库,给configure_make添加配置项configure_options = ["--enable-shared=yes"],同时将PCAP_LIBRARY的后缀改为对应平台的动态库后缀(Linux为.so,macOS为.dylib)
  • 部分特殊平台下libpcap编译产出的库名可能不同,可先单独编译libpcap目标,查看输出目录下的库文件名,替换PCAP_LIBRARY中的文件名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:10