build - bazel build:无法链接外部非 bazel 共享库
问题描述
我第一次尝试使用 Bazel。我正在尝试使用 Bazel-3.7.2 构建一个共享库。共享库具有外部非 Bazel 库依赖项。Bazel 构建后,我得到了新的共享库“.so”文件。但是使用 ldd 我找不到外部依赖项。
WORKSPACE 文件如下所示。这里 libxed.so 是外部共享库。
# xed library
new_local_repository(
name = "libxed",
path = "dependencies/xed/kits/xed-install-base",
build_file_content = """
cc_library(
name = "libxed",
srcs = ["lib/libxed.so"],
hdrs = glob([
"include/xed/*.h",
]),
visibility = ["//visibility:public"],
)
""",
)
# xed header files
new_local_repository(
name = "libxed_headers",
path = "dependencies/xed/kits/xed-install-base/include/xed",
build_file_content = """
cc_library(
name = "xed",
hdrs = glob([
"*.h",
]),
visibility = ["//visibility:public"],
)
""",
)
构建文件:
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
cc_library(
name = "themis",
srcs = glob(
["src/main.cpp",
"src/tools/Themis/*.cpp",
],
),
hdrs = glob([
"includes/tools/Themis/mytool.hpp",
]),
strip_include_prefix = "includes",
linkopts = ["-pthread", "-lrt", "-lunwind", "-ldl"],
deps = [
"@libxed_headers//:xed",
"@libxed//:libxed",
],
visibility = ["//visibility:public"],
)
构建库后,它会创建 libthemis.so。
ldd bazel-bin/libthemis.so
linux-vdso.so.1 (0x00007ffe410ab000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f70e7de8000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f70e7a4a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f70e7842000)
libunwind.so.8 => /usr/lib/x86_64-linux-gnu/libunwind.so.8 (0x00007f70e7627000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f70e7423000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f70e7204000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f70e6e13000)
/lib64/ld-linux-x86-64.so.2 (0x00007f70e8171000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f70e6bfb000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f70e69d5000)
这里 libthemis.so 不包括 libxed.so。请注意,我可以使用 Cmake 正确构建 Themis 库。如何修复 Bazel 构建?
解决方案
推荐阅读
- c++ - 颜色在开始示例opengl中不起作用
- xml - java在处理FPML的XSLT转换时验证错误
- postgresql - 如何从 pg_proc 获取 prosrc 的每一行?
- c - 如何使用 libimobiledevice 获取已连接设备的 ECID?
- laravel - 将响应数据重定向到另一个视图
- java - 如何用 ArrayList 替换 String[]?
- amazon-web-services - HTTPS 在使用 URL 时不重定向,但在键入 IP 时有效
- laravel - 将 laravel 分页链接更改为通过 HTTPS
- python-3.x - 启用急切执行时,从 keras 模型手动访问和更新可训练变量
- php - 找不到类'Maatwebsite\\Excel\\ExcelServiceProvider' - Laravel 4.2