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
?@EtanReisnerL
在库名为foodependency的情况下不起作用。因此(名称中没有lib
)。