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



在通过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?

问题是硬编码rpath错误。

如果在没有rpath选项的情况下没有要重新编译的问题库源,请使用chrpath实用程序

相关内容

最新更新