我正在学习 Bazel,因为我必须在工作中使用它。我有一个简单的构建规则,它从单个文件创建一个库,我想通过使用链接器版本文件来控制链接器导出的内容。(我在 Linux 上)
所以我试过:
cc_library (
name ="thelib",
srcs = ["lib.cpp"],
linkopts = ["-Wl,--version-script,lib.ver"]
)
它告诉我“没有这样的文件或目录”。
我试过什么:
bazel info --show_make_env
它向我展示了一个名为的变量workspace
,然后我尝试了,$(workspace)/lib/lib.ver
但后来它说$(workspace) not defined
Bazel 是个骗子。-fvisiblity=hidden
and export using __attribute__
to export 不是一个选项,因为标准 C++ 库会覆盖它并强制导出您不想出现在界面上的符号(该库仅使用 extern "C" 界面使用我不想要任何其他垃圾出现在其上)。在这一点上,我完全没有想法了。任何帮助表示赞赏。
首先,共享库通常cc_binary
与其linkshared
属性一起声明,而不是cc_library
。这是违反直觉的,但反映了cc_binary
在cc_library
声明中间库的同时创建传递链接的意图。(喜欢冒险的人可以试试cc_shared_library
其次,可以通过linkopts
在deps
.
所以,一起来:
cc_binary(
name = 'mylib.so',
linkshared = True,
srcs = ['mylib.cc'],
linkopts = ['-Wl,-version-script=$(location version-script.lds)'],
deps = [
'version-script.lds',
]
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句