Gcc &引用;“干净”;与动态库链接(没有LD_库路径)?

Gcc &引用;“干净”;与动态库链接(没有LD_库路径)?,gcc,dynamic-linking,ldd,Gcc,Dynamic Linking,Ldd,这个标题大致概括了这一点。我试图在编译另一个动态库时链接一个动态库。这是我的(简略的)makefile: all: src/ gcc -fPIC -shared src/argsort.c -o libsort.so -lm gcc -fPIC -shared src/kdtree.c -o libkdtree.so -L./ -lsort -lm 所以我首先建立libsort.So。它工作得很好。然后我正在构建libkdtree.so,它使用libsort.so。编译过程

这个标题大致概括了这一点。我试图在编译另一个动态库时链接一个动态库。这是我的(简略的)makefile:

all: src/
    gcc -fPIC -shared src/argsort.c -o libsort.so -lm
    gcc -fPIC -shared  src/kdtree.c -o  libkdtree.so -L./ -lsort -lm
所以我首先建立libsort.So。它工作得很好。然后我正在构建libkdtree.so,它使用libsort.so。编译过程也很顺利,但libkdtree.so无法使用:以下是libkdtree.so的ldd输出:

ldd libkdtree.so
    linux-vdso.so.1 =>  (0x00007fffcc54e000)
    libsort.so => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6b3c532000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6b3c172000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6b3ca57000)
如果我将目录添加到LD_LIBRARY_PATH,它就会工作,链接就在那里,我可以使用这个库。LD_LIBRARY_PATH真的要这样改变吗?我别无选择吗?我的意思是与其他人共享我的代码,我不想要求人们在他们的.bashrc中添加一些东西,这样他们就可以运行我的代码。我想我不明白-L是做什么的,因为我以为它会手动链接库

有人能不能给我一个我忽略的神奇方法,或者粉碎我清洁链接的梦想


谢谢大家!

试试-rpath链接器选项,虽然硬编码库位置是一个糟糕的形式。谢谢你,我会看看它,它似乎在做我想要的。然而,我仍然不明白-L./如果我需要-rpath…-L告诉我在链接时在哪里可以找到lib,-rpath告诉我在哪里可以查看运行时。