如何排查Bazel中Foreign Cc的CMake构建失败问题?
排查tinycudann Bazel构建失败的方法
1. 直接获取详细构建日志
执行构建命令时添加--verbose_failures参数,终端会输出完整的失败详情,包括CMake执行的命令和错误输出:
bazel build //third_party/tinycudann:tinycudann_py_lib --verbose_failures
如需查看所有执行的命令,结合-s参数:
bazel build //third_party/tinycudann:tinycudann_py_lib --verbose_failures -s
2. 保留沙箱目录查看构建文件
使用--sandbox_debug参数,构建失败后沙箱目录不会被自动删除,可直接查看生成的CMake文件和日志:
bazel build //third_party/tinycudann:tinycudann_py_lib --sandbox_debug
- 构建失败时终端会输出沙箱路径(类似
/tmp/bazel-sandbox-xxxxxx/),进入该路径后,在external/tinycudann_repo下找到构建目录(通常为_build或cmake_build):- 查看
CMakeCache.txt确认CMake选项是否正确(比如TCNN_BUILD_STATIC是否开启、BUILD_SHARED_LIBS是否为OFF) - 查看
CMakeFiles/CMakeOutput.log和CMakeFiles/CMakeError.log,这两个文件记录了CMake配置、编译过程的所有输出与错误
- 查看
3. 验证产物实际生成路径
进入沙箱目录后执行查找命令,确认库文件是否存在及实际名称:
find . -name "libtiny-cuda-nn*"
重点检查built_and_installed_tinycudann/lib/目录下的文件,确认是否生成了预期的.a静态库,还是因CMake选项配置生成了.so动态库。
4. 调整rules_foreign_cc配置增强日志
在tinycudann.BUILD.bazel的cmake规则中添加以下配置:
cmake( name = "tinycudann", # 其他已有配置... log_level = "VERBOSE", postfix_script = "find /workspace -type f -name '*.a' > /tmp/tinycudann_libs.log", )
log_level = "VERBOSE"会让rules_foreign_cc输出更详细的构建步骤postfix_script会将所有生成的静态库路径写入日志,构建后可在本地/tmp/tinycudann_libs.log查看(远程构建环境需调整路径)
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

