如何在编译和更改之间更改共享库位置运行?

时间:2014-05-08 23:20:24

标签: 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

但是,在运行时,foo.so和foodependency.so都位于同一目录bar中:

bar
---foo.so
---foodependency.so

无法更改运行时的此布局。但现在结果是ldd foo.so返回以下内容: ../path/to/foodependency.so => not found

如何解决这种差异?

1 个答案:

答案 0 :(得分:1)

  

如何解决此问题

有几种方法。

  1. foodependency.so重命名为libfoodependency.so,并在链接时使用-L../path/to -lfoodependency,或
  2. 链接时使用-L../path/to -l:foodependency.so
  3. 关联foodependency.so时,请添加-Wl,--soname=foodependency.so并使用原始链接行。