【问题标题】:Linking error - same symbol in different shared libraries链接错误 - 不同共享库中的相同符号
【发布时间】:2011-07-27 21:38:53
【问题描述】:

我在我的代码中使用函数 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()?

【问题讨论】:

    标签: linker shared-libraries linker-errors


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 2021-07-25
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      相关资源
      最近更新 更多