Bazel未能包含外部静态库.a

时间:2017-12-04 23:33:12

标签: include static-libraries bazel

- 问题已解决 -

这个问题已经解决了。谢谢你的帮助!

问题和原因在未来简要说明如下:

[环境]

Ubuntu 14.04,Bazel,C ++

[问题]

我想要包含一个外部库。所以我下载源文件并将其作为静态库.a。

我正确设置了BUILD,WORKSPACE和相关文件。但是,在编译时,它会警告错误:

Linking of rule '//main' failed (Exit 1)
main: error: undefined reference to 'void ex_lib::compute(double*, double const*, double const*)'
collect2: error: ld returned 1 exit status

我尝试使用.lo和alwayslink方法但不起作用。

Alternate to "`--whole-archive`" in bazel

[原因]

这是因为外部库源文件包含重复的头文件。所以我修复了头文件问题。再次制作.a。一切正常。

瞪羚没什么不对。图书馆本身就是导致问题的原因。但错误信息令人困惑,我认为这是由bazel引起的。

2 个答案:

答案 0 :(得分:3)

您可以采取的进一步调查是使用--subcommands运行干净的bazel构建,以查看已执行的操作的各个命令行。然后你可以cd进入沙箱,并执行与bazel相同的gcc命令并调试错误。或者您可以尝试通过手写gcc命令链接到工作,并在此处粘贴生成的命令bazel和您所需的命令。是否有可能在系统上安装了多个liegroups库,并且gcc会收到与您所包含的标题不兼容的库?

答案 1 :(得分:0)

问题解决了。特别感谢mhlopko。

主要是因为lib源文件存在错误。因此。我使用的文件包含错误。现在,bazel可以正常使用新的lib文件。

顺便说一下,现在bazel可以正常使用我生成的.a或.so文件。