【发布时间】:2017-05-04 14:01:48
【问题描述】:
我在一台没有 root 访问权限的 Linux 机器上。这台机器上有Boost 1.36,但是我需要更新版本的boost,所以我安装了本地版本的Boost 1.62。我正在将一些目标文件与 nvcc 链接。该链接还包括大约 20 个第三方动态库。链接的输出结果是另一个动态库。
问题是这样的:如果我在输出库上运行“ldd”,它会告诉我该库同时依赖于 libboost_system.so.1.36.0 和 libboost_system.so.1.62.0。
我无法弄清楚 libboost_system.so.1.36.0 是如何进入其中的。其他动态库都不依赖于 libboost_system.so.1.36.0 (我对所有这些库都运行了 ldd )。如何判断 libboost 1.36 依赖项来自何处?
以下是创建输出库的链接器命令的简要说明:
nvcc --ptxas-options=-v --compiler-options '-fPIC' --shared
lots of object files
lots of -L/wherever -lwhatever options
-o libOutput.so
【问题讨论】:
-
您是如何构建输出库的?你用了什么命令?在问题的最基础上,依赖来自那里。
-
我在原文中添加了链接命令的简要说明。
-
"很多目标文件" "很多 -L/wherver -lwhatever 选项" 认真的吗?我们应该怎么处理这种含糊不清的东西哈哈
-
抱歉含糊不清。有必要。目标文件是 30 个 .o 文件的列表。 -Lwherever -lwhatever 选项就是这样。我对 -L 目录中的所有 .so 文件运行了 ldd 。我不确定如果我提供实际列表是否会有所帮助。它包含大约 60 个文件。
-
不,没有必要,因为在您构建了minimal reproducible example 之后,您可以给我们一个简单的单行代码来演示问题。作为个人调试工作的一部分,您应该已经这样做了。