Linux 绝对路径如何进入可执行文件动态部分的“需要”部分?

Linux 绝对路径如何进入可执行文件动态部分的“需要”部分?,linux,makefile,elf,readelf,Linux,Makefile,Elf,Readelf,我有许多可执行文件,它们链接到一个lib路径。例如,可执行文件foo链接(比如)libboost\u system.so和libfoo.so,后者是我自己构建的。我将第三方库放置在变量LDLIBS中,并通过-lfoo链接我的库,使makefile行如下所示: foo: objects $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) -lfoo 但是,当我看到自己的路径时,我看到了自己的路径 $ readelf --dynamic foo Dynamic s

我有许多可执行文件,它们链接到一个lib路径。例如,可执行文件
foo
链接(比如)libboost\u system.so和
libfoo.so
,后者是我自己构建的。我将第三方库放置在变量
LDLIBS
中,并通过
-lfoo
链接我的库,使makefile行如下所示:

foo: objects
    $(CXX) $(LDFLAGS) -o $@ $^ $(LDLIBS) -lfoo
但是,当我看到自己的路径时,我看到了自己的路径

$ readelf --dynamic foo 

Dynamic section at offset 0x3c68 contains 48 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [/home/nthompson/foo_dir/lib/libfoo.so]
 0x0000000000000001 (NEEDED)             Shared library: [libboost_system.so.1.58.0]
我自己的图书馆是唯一有绝对路径的图书馆


如何仅使用makefile(即不使用
patchelf--replace needed
chrpath
)摆脱这个怪物?

链接时是否添加了
-L/home/nthompson/foo_dir/lib/
;它链接很好。如果没有绝对路径,您希望动态加载程序在哪里找到它?使用可执行文件中的
ORIGIN
变量。