【发布时间】:2021-04-16 18:19:10
【问题描述】:
我正在学习 Bazel,因为我必须在工作中使用它。我有一个简单的构建规则,它从单个文件创建一个库,我想通过使用链接器版本文件来控制链接器导出的内容。 (我在 Linux 上)
所以我尝试了:
cc_library (
name ="thelib",
srcs = ["lib.cpp"],
linkopts = ["-Wl,--version-script,lib.ver"]
)
它告诉我“没有这样的文件或目录”。
我尝试了什么:
- 我尝试了相对于我发出 bazel build 命令的目录的路径,但无济于事。
- cc_library() 的文档说“linkopts”支持 make 变量替换,所以我用
bazel info --show_make_env列出了 make 变量,它显示了一个名为workspace的变量 所以我然后尝试了$(workspace)/lib/lib.ver,但它说$(workspace) not defined所以Bazel是个骗子。 - 唯一可行的方法是拼写链接描述文件的绝对路径,但我不想强制执行。
- cc_library() 有一个 win_def_file 选项,但猜猜看,那只是 Windows。
- self-closed github issue 建议我应该将文件名作为单独的参数传递,它也不起作用。
- 使用
-fvisiblity=hidden和使用__attribute__导出不是一个选项,因为标准C++ 库会覆盖它并强制导出您不想出现在界面上的符号(该库使用extern "只有C"界面,我不希望上面出现任何其他垃圾)。 - Bazel 中似乎没有选项来指定要本地导出的符号。
在这一点上,我完全没有想法了。任何帮助表示赞赏。
【问题讨论】: