"清洁"链接动态库(没有LD_LIBRARY_PATH)?

时间:2014-06-24 09:59:32

标签: 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。编译也很好,但是libkdtree.so是不可用的:这里是ldd for libkdtree.so的输出:

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的作用,因为我认为它会手动链接库。

有人可以给我一些我忽略的神奇方法,还是粉碎我对干净连接的梦想?

谢谢!

0 个答案:

没有答案