10

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

我的问题是 - 共享对象文件本身也有静态编译rpath的吗?

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

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

这个错误向我表明,实际上库本身 -mylib.so有一个静态编译的rpath

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

4

1 回答 1

8

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

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

这个错误向我表明,实际上库本身 -mylib.so有一个静态编译的rpath

错误消息根本没有说。你从哪里得到这个想法的?

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

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

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

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

于 2015-05-21T17:13:46.947 回答