当共享库位置在编译和运行时之间更改时,如何解析共享库位置?

How to resolve shared library location when it changes between compile & run time?

本文关键字:位置 共享 何解析 运行时 编译 之间      更新时间:2023-10-16

我有以下内容:

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。还有食物依赖。所以都在同一个目录下,bar:

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

运行时不能更改此布局。但现在作为结果,ldd foo.so返回以下内容:../path/to/foodependency.so => not found

如何解决这个差异?

如何解决这个问题

有几种方法。

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