共享对象文件的rpath

时间:2015-05-21 16:58:54

标签: linux shared-libraries rpath

可执行文件的rpath指定一个或多个目录,用于在运行时查找共享对象。

我的问题是 - 共享对象文件自己也有静态编译的rpath s?

我最近在与共享对象链接时收到了运行时错误:

./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so)

此错误向我表明实际的库本身 - mylib.so具有静态编译的rpath

我的理解是rpath仅适用于可执行文件,而不是共享对象。那么rpath 也适用于共享对象吗?

1 个答案:

答案 0 :(得分:6)

  

共享对象文件本身也有静态编译的rpaths

他们可能(或可能不会)取决于他们是否与-Wl,-rpath=...选项相关联。

  

此错误向我表明实际的库本身 - mylib.so具有静态编译的rpath

错误消息根本就没有。你在哪里得到这个想法?

如果您想知道mylib.so是否有DT_RPATH,请执行以下操作:

readelf -d mylib.so | grep 'R.*PATH'  # could also have RUNPATH
  

我的理解是rpath仅适用于可执行文件,而不是共享对象。那么rpath也适用于共享对象吗?

您的理解不正确,RPATH(和RUNPATH)也适用于共享对象。