首页 > 解决方案 > 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 构建?

标签: buildcompilationshared-librariesbazel.so

解决方案


推荐阅读