链接库 RPATH 的 C++ 链接器选项

问题描述 投票:0回答:1

我有一个 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?

c++ linker dependencies ld rpath
1个回答
0
投票

有没有办法为

lib1.so?

指定rpath

有几个选项可供选择:

  1. MyApp
    lib2.so
    lib1.so
    链接,以便在加载
    lib2.so
    之前使用
    MyApp
    的 rpath 加载
    lib1.so
  2. patchelf --set-rpath '$ORIGIN' lib1.so
    使
    lib1.so
    在寻找
    $ORIGIN
    时使用
    lib2.so
© www.soinside.com 2019 - 2024. All rights reserved.