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

使用Bazel构建C++时寻找libpython3.x.so以引入Python.h

寻找libpython3.6.so文件及Bazel引入Python.h的方案

一、查找libpython3.6.so文件的方法

  • 全局搜索文件:执行sudo find / -name "libpython3.6.so" 2>/dev/null,该命令会遍历系统所有目录查找目标文件,2>/dev/null用于过滤无权限访问目录的报错信息。
  • 检查系统库缓存:执行ldconfig -p | grep libpython3.6,如果libpython3.6.so已被加入系统库路径,可通过此命令快速定位。
  • 查看deadsnakes默认安装路径:通常通过deadsnakes安装的Python库文件会在/usr/lib/python3.6/或/usr/lib/x86_64-linux-gnu/目录下,可直接进入这些目录查看。
  • 安装Python开发包:仅安装python3.6可能缺少对应的开发文件,执行sudo apt-get install python3.6-dev,该包会包含config目录及libpython3.6.so文件。

二、Bazel引入Python.h的替代方案

1. 在BUILD文件中直接指定路径

编写cc_binary规则时,直接声明Python头文件目录和链接库:

cc_binary(
    name = "your_target",
    srcs = ["your_cpp_file.cpp"],
    includes = ["/usr/include/python3.6"],
    linkopts = ["-lpython3.6"],
)

2. 定义本地Python依赖仓库

通过local_repository将Python库封装为Bazel依赖,在WORKSPACE文件中添加:

local_repository(
    name = "python3_6",
    path = "/usr",
    build_file_content = """
cc_library(
    name = "python_lib",
    includes = ["include/python3.6"],
    srcs = ["lib/x86_64-linux-gnu/libpython3.6.so"],
    visibility = ["//visibility:public"],
)
""",
)

之后在BUILD文件的目标中依赖该库:

cc_binary(
    name = "your_target",
    srcs = ["your_cpp_file.cpp"],
    deps = ["@python3_6//:python_lib"],
)

3. 使用Bazel官方Python规则

利用Bazel内置的Python规则,在BUILD文件中通过py_library间接关联,或结合cc_library实现C++与Python的交互,确保规则中包含Python头文件和库的依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:13:18