Bazel 未能包含外部静态库 .a
Bazel failed to include a external static library .a
--问题已解决--
这个问题解决了。感谢大家的帮助!
问题及原因简述如下,以供日后其他读者参考:
[环境]
Ubuntu 14.04,巴泽尔,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引起的。
您可以进一步调查的是 运行 使用 --subcommands
构建干净的 bazel 以查看执行的各个命令行操作。然后你可以 cd
进入沙箱,并执行与 bazel 相同的 gcc
命令并调试错误。或者您可以尝试通过手写 gcc 命令并在此处粘贴 bazel 生成的命令和您想要的命令来获得链接。是否有可能您在系统上安装了多个 liegroups
库,而 gcc 得到的库与您包含的 headers 不兼容?
问题已解决。特别感谢 mhlopko。
主要是lib源文件有错误。因此,我使用的 .a 文件包含错误。现在 bazel 可以正常使用新的 lib 文件了。
顺便说一下,现在 bazel 可以很好地处理我生成的 .a 或 .so 文件。
--问题已解决--
这个问题解决了。感谢大家的帮助!
问题及原因简述如下,以供日后其他读者参考:
[环境]
Ubuntu 14.04,巴泽尔,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引起的。
您可以进一步调查的是 运行 使用 --subcommands
构建干净的 bazel 以查看执行的各个命令行操作。然后你可以 cd
进入沙箱,并执行与 bazel 相同的 gcc
命令并调试错误。或者您可以尝试通过手写 gcc 命令并在此处粘贴 bazel 生成的命令和您想要的命令来获得链接。是否有可能您在系统上安装了多个 liegroups
库,而 gcc 得到的库与您包含的 headers 不兼容?
问题已解决。特别感谢 mhlopko。
主要是lib源文件有错误。因此,我使用的 .a 文件包含错误。现在 bazel 可以正常使用新的 lib 文件了。
顺便说一下,现在 bazel 可以很好地处理我生成的 .a 或 .so 文件。