- 问题已解决 -
这个问题已经解决了。谢谢你的帮助!
问题和原因在未来简要说明如下:
[环境]
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引起的。
答案 0 :(得分:3)
您可以采取的进一步调查是使用--subcommands
运行干净的bazel构建,以查看已执行的操作的各个命令行。然后你可以cd
进入沙箱,并执行与bazel相同的gcc
命令并调试错误。或者您可以尝试通过手写gcc命令链接到工作,并在此处粘贴生成的命令bazel和您所需的命令。是否有可能在系统上安装了多个liegroups
库,并且gcc会收到与您所包含的标题不兼容的库?
答案 1 :(得分:0)
问题解决了。特别感谢mhlopko。
主要是因为lib源文件存在错误。因此。我使用的文件包含错误。现在,bazel可以正常使用新的lib文件。
顺便说一下,现在bazel可以正常使用我生成的.a或.so文件。