C++ 如何在编译和维护之间更改共享库位置;运行时间?

C++ 如何在编译和维护之间更改共享库位置;运行时间?,c++,linker,shared-libraries,gnu-make,C++,Linker,Shared Libraries,Gnu Make,我有以下资料: g++ $(LD_OPTS) -o lib/foo.so lib/bar.o lib/qaz.o ../path/to/foodependency.so 它和foo都是在这里构建的(假设之前makefile已经构建了foodependency)。最终结果如下所示,在构建过程中: project ---libFoo ------lib ---------foo.so ---libFooDependency ------lib ---------foodependency.so

我有以下资料:

g++ $(LD_OPTS) -o lib/foo.so lib/bar.o lib/qaz.o ../path/to/foodependency.so
它和
foo
都是在这里构建的(假设之前makefile已经构建了foodependency)。最终结果如下所示,在构建过程中:

project
---libFoo
------lib
---------foo.so
---libFooDependency
------lib
---------foodependency.so
但是,在运行时,foo.so和foodependency.so都位于同一目录下,
bar

bar
---foo.so
---foodependency.so
运行时无法更改此布局。但是现在,结果是,
ldd foo.so
返回以下内容:
。/path/to/foodependency.so=>未找到

我如何解决这个差异

我如何解决这个问题

有几种方法

  • foodependency.so
    重命名为
    libfoodependency.so
    ,并在链接时使用
    -L../path/to-lfoodependency
    ,或
  • 在链接时使用
    -L../path/to-L:foodependency.so
    ,或者
  • 链接
    foodependency.so
    时,添加
    -Wl,--soname=foodependency.so
    并使用原始链接行
  • 使用
    -L
    -L
    ?@EtanReisner
    L
    在库名为
    foodependency的情况下不起作用。因此
    (名称中没有
    lib
    )。