我们可以在 运行 时间传递目标依赖项之一所需的共享库吗?

can we pass a shared library that one of our target's dependency needs at run time?

Can C pass down the location of A.so at run time to B when it needs it?

不清楚你的意思。

C 已经 安排加载 A.so(通过 linking 到 A.so)。 还有你想“传下去”什么?

  • Does B.so really need to link against A.so or it is ok if one of the dependents resolves that for it during link time.

没有(如您所见)。但不是 linking B.so 反对 A.so 是容易出错的,通常被认为是一种不好的做法。

For example, if C resolves B.so before A.so B would fail.

同样不清楚您所说的“在 A.so 之前解析 B.so”是什么意思。

当你的二进制 C 以任何顺序直接 link 反对 A.soB.so 时,A.soB.so 都被加载在 C 的第一条指令执行之前由动态 linker 执行。

仅当 A.soB.so 定义了冲突的符号时,顺序才重要。在这种情况下,第一个定义该符号的库“获胜”(使用它的符号)。

Or the order of loading known which is exactly what is displayed in the output of ldd command

是的,加载顺序是由您 link 一切的方式预定义的,完全 ldd 命令打印的内容。