使用bazel集群链接动态库时找不到版本脚本文件

问题描述 投票:0回答:1

我正在使用

bazel
构建共享/动态库。
Build
文件中的规则如下

cc_library(
    name = "a",
    srcs = ["a.cc"]
)

filegroup(
    name = "vis_ld",
    srcs = ["tool/vis.ld"]
)

cc_library(
    name = "b",
    hdrs = ["b.h"],
    srcs = ["b.cc"],
    deps = [":a"],
)

cc_binary(
    name = "libgeta.so",
    deps = [":b"],
    linkshared = True,
    linkopts = [
        "-Wl,--version-script,","$(location :vis_ld)"
    ],
    data = [":vis_ld"]
)

libgeta.so
是目标二进制文件。从规则中我们知道,存在一个版本脚本文件,它限制了导出的符号。这是有线的,如果我在本地构建
libgeta.so
,它就可以正常工作。当我尝试使用 bazel 集群构建时,它失败并出现以下错误。

/opt/rh/devtoolset-7/root/usr/bin/ld.gold: error: cannot open tool/vs.ld: No such file or directory
/opt/rh/devtoolset-7/root/usr/bin/ld.gold: fatal error: unable to parse version script file tool/vs.ld
collect2: error: ld returned 1 exit status

我使用的 bazel 版本是

0.24.1

困扰我好几天了,请帮忙。谢谢!

我尝试在编译时使用规则

vs.ld
生成
genrule
文件,但它不起作用。

c++ version cluster-computing bazel dynamic-library
1个回答
0
投票

版本脚本需要进入

deps
cc_binary
属性而不是
data

(另外,Bazel 0.24.1 已经很老了。)

© www.soinside.com 2019 - 2024. All rights reserved.