【问题标题】:bazel: link to library that lacks 'lib' prefixbazel:链接到缺少“lib”前缀的库
【发布时间】:2018-05-29 17:04:45
【问题描述】:

我有一个外部库ace.so

cc_library(
    name='ace',
    hdrs=glob(['path/to/ace/**']),
    srcs=['path/to/ace.so'],
)

如何使用 bazel 链接到该库?我在直接调用 gcc/g++ 时知道a colon can be used,但我不确定如何从 bazel 获得相同的行为。

  • 我尝试将-l:ace.so(也是-Wl,-l:ace.so)添加到copts,但似乎bazel 没有将其传递给gcc 将其添加到用于链接器参数的@ 文件中.
  • 我尝试将nocopts='-lace.so'linkopts=['-l:ace.so'] 结合使用。不走运。
  • 我也尝试了cc_import 而不是cc_library,但这也没有用。

我已经阅读了Importing precompiled C++ libraries 文档,但我没有看到任何关于使用带有任意前缀或没有前缀的库的任何内容。

作为临时修复,我添加了一个符号链接 libace.so 指向 ace.so 并更改了 srcs 行以匹配。虽然这可行,但我更愿意说服 bazel 按原样使用该库。

【问题讨论】:

  • 我试过了,但没有通过。能否请您更正您的帖子。您在下面的代码块的第一段中将: 称为分号,但它是一个冒号。
  • @OndrejK。固定的。我意识到我在发布后犯了一个错误,但并没有认为它严重到需要修复 - 毕竟从链接页面中很明显。

标签: bazel


【解决方案1】:

看看有关库的信息是如何被收集和传递的,恐怕这是(假设“普通”动态库以liblibfoo.so 为前缀,因为-lfoo 是相当硬编码的此刻。同样的情况并非如此,它被认为是“版本化”(匹配模式"^.+\\.so(\\.\\d+)+$")动态库,它将作为-l:foo.so.1 传递。但不幸的是,这并不能真正帮助你,因为你会仍然需要采用类似的解决方法并创建一个虚构的版本控制来启动。也就是说,只要给出您的 solib 文件名,符号链接听起来就是一个合理的解决方法。

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    相关资源
    最近更新 更多