2013-02-16 88 views
0

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

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

回答

1

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

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