使用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
相关产品推荐
相关产品推荐

