libdl和libltdl有什么区别?

时间:2017-12-12 22:25:02

标签: c module linker libtool

libdllibltdl之间有什么区别?我刚注意到libodbc链接到它们两个

ldd /usr/lib/x86_64-linux-gnu/libodbc.so.2 | grep -i dl
    libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f411b822000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f411b01f000)

我知道Perl再次链接libdl

ldd /usr/bin/perl | grep -i dl
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f55faa2e000)

我在系统上看到两个单独的共享对象,

ls -lah /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1 /lib/x86_64-linux-gnu/libdl-2.26.so 
-rw-r--r-- 1 root root 39K Aug 20  2016 /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
-rw-r--r-- 1 root root 15K Oct 11 15:21 /lib/x86_64-linux-gnu/libdl-2.26.so

它们也链接到类似的东西,

ldd /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
    linux-vdso.so.1 =>  (0x00007ffc3e66b000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007efcbad4c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efcba96c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007efcbb15a000)
ldd /lib/x86_64-linux-gnu/libdl-2.26.so
    linux-vdso.so.1 =>  (0x00007ffe7889c000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbc9a14e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fbc9a732000)

是什么让libltdl与众不同?

1 个答案:

答案 0 :(得分:1)

libtool的一项功能是为具有相同或相似功能的许多不同平台提供libdl API(例如dlopen)(例如POSIX的dlopen等。 ,Windows的LoadLibrary等),以及对其链接器不支持动态链接的平台的共享库仿真。

我在Linux机器上对libodbc.so.2进行了一些分析。 nm -D似乎只显示libltdl的{​​{1}}个符号,而libodbc.so.2似乎只有objdump -p部分libltdl.so.7NEEDED在这种情况下,似乎没有打印出完全准确的信息(您的ldd输出看起来与我看到的类似)。