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

ldd显示异常库do_not_link_against_nvinfer_builder_resource与链接器日志不符

问题描述

我尝试将库libnvinfer_builder_resource.so.8.5.1链接到项目中,但运行时出现如下错误:

bazel-out/host/bin/gen_trt_ops_py_wrappers_cc: error while loading shared libraries: do_not_link_against_nvinfer_builder_resource: cannot open shared object file: No such file or directory

使用ldd检查发现程序实际链接的是异常库:

do_not_link_against_nvinfer_builder_resource => not found

而非我添加的目标库。我启用了链接器(lld和gold)的verbose日志调试,日志均显示已正确找到并链接目标库:

/usr/bin/ld.gold: Attempt to open bazel-out/k8-fastbuild/bin/_solib_local/_U@local_Uconfig_Ucuda_S_Scuda_Ccufft___Ucuda_Slib64/libnvinfer_builder_resource.so.8.5.1 failed
/usr/bin/ld.gold: Attempt to open bazel-out/k8-fastbuild/bin/_solib_local/_U@local_Uconfig_Ucuda_S_Scuda_Ccurand___Ucuda_Slib64/libnvinfer_builder_resource.so.8.5.1 failed
/usr/bin/ld.gold: Opened new descriptor 9 for "bazel-out/k8-fastbuild/bin/_solib_local/_U@tensor_Urt_S_S_Ctensor_Urt___Ulib/libnvinfer_builder_resource.so.8.5.1"
/usr/bin/ld.gold: Attempt to open bazel-out/k8-fastbuild/bin/_solib_local/_U@tensor_Urt_S_S_Ctensor_Urt___Ulib/libnvinfer_builder_resource.so.8.5.1 succeeded
/usr/bin/ld.gold: Unlocking file "bazel-out/k8-fastbuild/bin/_solib_local/_U@tensor_Urt_S_S_Ctensor_Urt___Ulib/libnvinfer_builder_resource.so.8.5.1"
/usr/bin/ld.gold: Released descriptor 9 for "bazel-out/k8-fastbuild/bin/_solib_local/_U@tensor_Urt_S_S_Ctensor_Urt___Ulib/libnvinfer_builder_resource.so.8.5.1"
/usr/bin/ld.gold: Closed descriptor 9 for "bazel-out/k8-fastbuild/bin/_solib_local/_U@tensor_Urt_S_S_Ctensor_Urt___Ulib/libnvinfer_builder_resource.so.8.5.1"

但搜索不到任何关于do_not_link_against_nvinfer_builder_resource的日志,想请教为何链接器日志显示正确链接,但ldd却显示异常库?

解决方案分析

这种现象的核心原因是**libnvinfer_builder_resource.so.8.5.1本身内部依赖了do_not_link_against_nvinfer_builder_resource**,而非你的链接过程出错。

具体拆解:

  • 链接器日志的局限性:链接器日志仅记录你的程序直接链接目标库的过程,不会追踪目标库自身的内部依赖。所以你看到的是程序成功链接了libnvinfer_builder_resource.so.8.5.1,但该库本身还有未解决的依赖项。
  • 特殊依赖的本质:do_not_link_against_nvinfer_builder_resource是TensorRT的特殊设计——libnvinfer_builder_resource.so是一个占位符库,内部会动态依赖这个特殊名称的库,而这个名称并非独立的实体文件。TensorRT通常通过符号链接、编译时注入rpath等方式,让运行时能找到实际的资源库,这个名称更多是内部版本管理的别名。
  • Bazel构建的配置问题:在Bazel环境中,若TensorRT的依赖配置未正确处理这个内部依赖,就会触发运行时错误。常见原因包括:
    • TensorRT的Bazel规则未正确设置rpath,导致程序找不到库的实际位置
    • 手动链接的libnvinfer_builder_resource.so.8.5.1不完整,或未与TensorRT其他核心库一起正确引入
    • 构建过程未生成do_not_link_against_nvinfer_builder_resource对应的符号链接

修复建议:

  • 避免手动链接该库:libnvinfer_builder_resource.so是TensorRT内部资源库,应通过官方Bazel规则(如@tensorrt//:nvinfer_builder_resource)引入,而非手动指定.so文件。官方规则会自动处理内部依赖和符号链接。
  • 检查TensorRT的Bazel配置:确保WORKSPACE文件正确引入TensorRT依赖,使用官方提供的构建规则,而非自定义链接逻辑。
  • 验证rpath设置:用readelf -d bazel-out/host/bin/gen_trt_ops_py_wrappers_cc查看程序的rpath,确认TensorRT库所在目录是否被包含。若缺失,需在Bazel链接规则中添加linkopts = ["-Wl,-rpath,/path/to/tensorrt/lib"]。
  • 检查TensorRT库完整性:确认TensorRT安装包包含所有必要库文件,且版本匹配(8.5.1)。缺失的符号链接常导致此类依赖错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:05:23