为什么通过“bazel test”执行的 drake 中基于 OpenGL 的 VTK 目标有时会在 Linux 上失败?

Why do OpenGL-based VTK targets in drake executed via `bazel test` sometimes fail on Linux?

虽然二进制文件与 bazel run 一起工作,但当我 运行 使用 bazel test 进行测试时,例如:

$ bazel test //systems/sensors:rgbd_camera_test

我遇到了一系列来自 VTK/OpenGL 的错误:

ERROR: In /vtk/Rendering/OpenGL2/vtkXOpenGLRenderWindow.cxx, line 820
vtkXOpenGLRenderWindow (0x55880715b760): failed to create offscreen window

ERROR: In /vtk/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 816
vtkXOpenGLRenderWindow (0x55880715b760): GLEW could not be initialized.

ERROR: In /vtk/Rendering/OpenGL2/vtkShaderProgram.cxx, line 453
vtkShaderProgram (0x5588071d5aa0): Shader object was not initialized, cannot attach it.

ERROR: In /vtk/Rendering/OpenGL2/vtkOpenGLRenderWindow.cxx, line 1858
vtkXOpenGLRenderWindow (0x55880715b760): Hardware does not support the number of textures defined.

请问为什么会这样?

(注意:此 post 是一种从 http://drake.mit.edu/faq.html 迁移到 Whosebug 以解决基于用户的问题的方法。)

目前最好的解决方法是首先在 BUILD.bazel 文件中将测试标记为 local,使用 local = 1tags = [.., "local"]。这样做将使特定目标 运行 没有沙盒,使其具有类似于 bazel run.

的环境。

例如,在systems/sensors/BUILD.bazel中:

drake_cc_googletest(
    name = "rgbd_camera_test",
    # ...
    local = 1,
    # ...
)

如果这不起作用,请尝试 运行在没有沙盒的情况下在 Bazel 中进行测试:

$ bazel test --spawn_strategy=standalone //systems/sensors:rgbd_camera_test

请注意,您可以将 --spawn_strategy=standalone 添加到您的 ~/.bazelrc,但请注意,这意味着您的开发测试环境可能与其他开发人员的测试环境有更多差异。