我有一个 MyApp 项目,它依赖于
lib1.so
库。 lib1.so
有自己的依赖关系lib2.so
:
MyApp -> lib1.so -> lib2.so
我想运行 MyApp,并将所有依赖项放在一个目录中。
对于
lib1.so
,解决方案是在链接器选项中键入 -rpath
:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'")
但它不适用于
lib2.so
- 应用程序找不到它。lib1.so
不使用应用程序的rpath。lib1.so
指定rpath?
有没有办法为
指定rpathlib1.so?
有几个选项可供选择:
MyApp
与 lib2.so
和 lib1.so
链接,以便在加载 lib2.so
之前使用 MyApp
的 rpath 加载 lib1.so
。patchelf --set-rpath '$ORIGIN' lib1.so
使 lib1.so
在寻找 $ORIGIN
时使用 lib2.so
。