可执行文件的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
是否也适用于共享对象?
node
有自己的DT_RUNPATH
,那么当它使用dlopen
打开一个具有自己的DT_RUNPATH
的共享对象时,动态加载器是否会搜索两个DT_RUNPATH
?还是只考虑共享对象内部的DT_RUNPATH
?如果共享对象本身没有DT_RUNPATH
,会发生什么? - CMCDragonkai