假设我们有2个库(A和B)具有相同的SONAME和接口。开发人员在编译时链接到A,但用户在运行之前设置了$ LD_LIBRARY_PATH。一切都很正常,但是用户不知道他们使用了与开发人员想要的不同的库。
我是编译的学习者,不确定这只是一个黑客,应该避免或不应该。我知道向编译器提供“-Wl, - rpath”将优先考虑运行时链接路径,但不确定软件开发中最“标准”的策略是什么。
答案 0 :(得分:1)
如果用户设置了LD_LIBRARY_PATH,则表示他们做知道他们获得了不同的库。这就是他们首先设置LD_LIBRARY_PATH的原因。如果他们想要默认库,他们就不会设置env var。这是一个非常明确的设置,意味着“我知道我在做什么,我有我的理由。”
至于回答实际问题,rpath是一种标准方法,许多库使用它或将其作为构建时配置选项提供。你确定它会覆盖LD_LIBRARY_PATH吗? AFAIK,它没有。并且它不应该,因为这将使用户无法改变默认的库搜索路径。