Compilation LD_LIBRARY_链接和运行之间的路径已更改

Compilation LD_LIBRARY_链接和运行之间的路径已更改,compilation,dynamic-linking,Compilation,Dynamic Linking,假设我们有两个库(A和B),它们具有相同的SONAME和接口。开发人员在编译时链接到,但用户在运行之前设置了$LD_LIBRARY_PATH。一切都很正常,但用户不知道他们使用的库与开发人员想要的库不同 我是一名编译学习者,不确定这是否只是一个黑客行为,是否应该避免。我知道向编译器提供“-Wl,-rpath”将优先考虑运行时链接路径,但不确定软件开发中最“标准”的策略是什么。如果用户设置了LD_LIBRARY_path,这意味着他们知道他们得到了不同的库。这就是为什么他们首先要设置LD_LIBR

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


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

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

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