1

标题几乎概括了它。我正在尝试在编译另一个动态库时链接一个动态库。这是我的(简短而谦虚的)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。它工作得很好。然后我正在构建使用 libsort.so 的 libkdtree.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 做了什么,因为我认为它会手动链接库。

有人可以给我我忽略的魔术方法,还是粉碎我干净链接的梦想?

谢谢 !

4

0 回答 0