0

假设我们有 2 个具有相同 SONAME 和接口的库(A 和 B)。开发人员在编译时链接到 A,但用户在运行前设置了 $LD_LIBRARY_PATH。一切都很正常,但用户不知道他们使用了与开发人员想要的不同的库。

我是编译的学习者,不确定这只是一种技巧,是否应该避免。我知道向编译器提供“-Wl,--rpath”会优先考虑运行时链接路径,但不确定软件开发中最“标准”的策略是什么。

4

1 回答 1

1

如果用户设置了 LD_LIBRARY_PATH,这意味着他们确实知道他们得到了一个不同的库。这就是他们首先设置 LD_LIBRARY_PATH 的原因。如果他们想要默认库,他们就不会设置那个 env var。这是一个非常明确的设置,意味着“我知道我在做什么,我有我的理由”。

至于回答实际问题,rpath 是一种标准方法,许多库使用它或将其作为构建时配置选项提供。你确定它会覆盖 LD_LIBRARY_PATH 吗?AFAIK,它没有。而且不应该这样做,因为这会使用户无法更改默认库搜索路径。

于 2013-02-16T08:35:41.623 回答