You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bazel中使用预编译Drake作外部依赖?编译报错求助

Drake预编译版+Bazel构建的常见问题与解决

场景背景

基于Drake的C++项目,采用Bazel构建系统。原使用drake_bazel_external将Drake源码作为外部依赖,运行正常;因需使用SNOPT求解器,切换为预编译版Drake并遵循drake_bazel_installed示例配置后,出现多编译报错。


问题1:Eigen头文件缺失

报错内容

In file included from .../drake/common/autodiff.h:12:10:
fatal error: Eigen/Core: No such file or directory

解决方法

在项目根目录的.bazelrc中添加编译选项,手动指定Eigen头文件路径:

build --cxxopt=-I/usr/include/eigen3

注:此为临时 workaround,根源是预编译Drake的Bazel配置未正确导出依赖路径,后续可关注Drake官方更新修复。


问题2:@drake//tools/skylark:py.bzl路径错误

报错内容

ERROR: error loading package 'app': Label '@drake//tools/skylark:py.bzl' is invalid because 'tools/skylark' is not a package; perhaps you meant to put the colon here: '@drake//:tools/skylark/py.bzl'?

解决方法

预编译版Drake的Bazel包结构与源码版存在差异,需修改Bazel文件中的加载路径:
将代码中的load("@drake//tools/skylark:py.bzl", ...)修改为load("@drake//:tools/skylark/py.bzl", ...),调整路径的分隔逻辑。


问题3:drake/lcmt_iiwa_status.hpp头文件缺失

报错内容

In file included from .../drake/manipulation/kuka_iiwa/iiwa_status_receiver.h:6:10:
fatal error: drake/lcmt_iiwa_status.hpp: No such file or directory

解决方法

该头文件是LCM消息自动生成的代码,需确保Bazel目标依赖正确的Drake库:

  1. 在BUILD.bazel中,将目标的依赖从仅头文件集合改为具体的库目标:
cc_binary(
    name = "connection_test",
    srcs = ["connection_test.cc"],
    deps = [
        "@drake//manipulation/kuka_iiwa:iiwa_status_receiver",
        # 其他依赖项...
    ],
)
  1. 若需直接引用生成的LCM头文件,可显式添加@drake//manipulation/kuka_iiwa:lcm_types到依赖列表中,确保生成的头文件被纳入编译路径。

同时检查WORKSPACE中预编译Drake的配置,确保使用drake_import_installed()(apt安装场景)或正确的http_archive配置,保证所有依赖包被正确导入。


内容的提问来源于stack exchange,提问作者Chen Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:20:39