链接错误 - 不同共享库中的相同符号

时间:2011-07-27 21:38:54

标签: linker shared-libraries linker-errors

我在我的代码中使用函数regcomp()。我的代码链接libonig.so以及libc.so.6。 这两个库都有自己的regcomp()实现,但我想使用libonig.so的实现。但是,我的代码总是使用libc.so.6中的实现。 ldd的输出如下 -

ldd libtest.so

    linux-vdso.so.1 =>  (0x00007fffa03ff000)
    libonig.so.2 => /usr/local/lib/libonig.so.2 (0x00007f5cb2fbf000)
    libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f12a43cf000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f12a414c000)
    libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f12a3f36000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f12a3be1000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003421c00000)

我不允许修改任何libonig.so或libc.so.6。有没有办法指定链接器应该从libonig.so使用regcomp()?

1 个答案:

答案 0 :(得分:0)

刚刚解决了这个问题。我实际上是使用dlopen()来加载共享对象(libtest.so)。所以我应该将libonig.so链接到正在加载libtest.so的二进制文件。

另一方面,我试图将libonig.so链接到libtest.so。但是当二进制文件运行时,它从libc.so.6获得了regcomp()的版本,并且认为没有必要用libonig.so解析符号。链接libonig.so并在LD_LIBRARY_PATH中包含其路径解决了这个问题。