为什么动态库的依赖项在其文件名中具有特定目录

时间:2014-09-29 15:34:16

标签: gcc linker shared-libraries

通过gcc编译代码时发现了一件奇怪的事情: 依赖库有时会在文件名(* .so)之前有一个目录,而通常它只是一个* .so,在文件名之前没有任何目录,如下所示:

 $>ldd Lib/libpagemanager.so
    linux-vdso.so.1 =>  (0x00007ffff65ef000)
    liblec.so.1 => /farequote/FQProduction/Dataware/CachingServices/Lib/liblec.so.1 (0x00007f7a897ed000)
    Input_API/MFaSTDeps/Lib/./liblmdb.so => not found
    liblz4.so.1 => not found
    libemmalloc.so.1 => /farequote/FQProduction/MiddleWareLibs/libemmalloc.so.1 (0x00007f7a895de000)
    libfqparams.so.1 => /farequote/FQProduction/MiddleWareLibs/libfqparams.so.1 (0x00007f7a89391000)
    libmfastlog.so.1 => not found
    libmfaststat.so.1 => not found
    libstdc++.so.6 => /farequote/FQProduction/GCCRuntime/Lib/libstdc++.so.6 (0x00007f7a89189000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f7a88f10000)

在此示例中,此库文件查找liblmdb.so,该文件必须来自Input_API / MFaSTDeps / Lib。其他依赖库没有这个约束。

这是怎么来的?我该怎么做才能使这个库依赖于来自LD_LIBRARY_PATH中任何目录的liblmdb.so?

1 个答案:

答案 0 :(得分:0)

问题是硬编码的错误。

如果没有rpath选项重新编译没有问题lib的来源,请使用chrpath utility