我正在使用
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
文件,但它不起作用。
版本脚本需要进入
deps
的cc_binary
属性而不是data
。
(另外,Bazel 0.24.1 已经很老了。)