虽然二进制文件与 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.
请问为什么会这样?
(注意:这篇文章是一种从 http://drake.mit.edu/faq.html 迁移到 StackOverflow 以解决基于用户的问题的方法。)
最佳答案
目前最好的解决方法是首先在 BUILD.bazel
文件中将测试标记为 local
,或者使用 local = 1
,或 tags = [.., "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
,但请注意,这意味着您的开发测试环境可能会偏离得更多来自其他开发人员的测试环境。
关于linux - 为什么通过 `bazel test` 执行的 drake 中基于 OpenGL 的 VTK 目标有时会在 Linux 上失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49355055/