Linux 绝对路径如何进入可执行文件动态部分的“需要”部分?
我有许多可执行文件,它们链接到一个lib路径。例如,可执行文件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
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
变量。