我有许多链接到单个库路径的可执行文件。例如,可执行文件foo
链接到 (say)libboost_system.so
和libfoo.so
,后者是我自己构建的。我将第三方库放在一个变量LDLIBS
中,并通过链接我的库-lfoo
,因此 makefile 行如下所示:
foo: objects
$(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) -lfoo
然而,当我readelf
,我看到了自己的道路!
$ readelf --dynamic foo
Dynamic section at offset 0x3c68 contains 48 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [/home/username/foo_dir/lib/libfoo.so]
0x0000000000000001 (NEEDED) Shared library: [libboost_system.so.1.58.0]
我自己的库是唯一具有绝对路径的库。
我怎样才能摆脱这个怪物只使用makefile,即不使用patchelf --replace-needed
or chrpath
?