共享对象文件的rpath

Sil*_*ler 8 linux rpath shared-libraries

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

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

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

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

这个错误告诉我实际的库本身 - mylib.so有一个静态编译rpath.

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

Emp*_*ian 6

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

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

这个错误告诉我实际的库本身 - mylib.so有一个静态编译rpath.

错误消息根本没有说明.你在哪里得到这个想法?

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

readelf -d mylib.so | grep 'R.*PATH'  # could also have RUNPATH
Run Code Online (Sandbox Code Playgroud)

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

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