代码之家  ›  专栏  ›  技术社区  ›  Dmitry Khalatov

从LD隐藏共享对象中的符号

  •  8
  • Dmitry Khalatov  · 技术社区  · 17 年前

    我有两个第三方库,偶尔会导出相同的符号名。加载可执行文件时, ld 通常选错一个,结果我就崩溃了。我对这些图书馆的内容做不了太多,所以也许有一种方法可以指导我 如何找到合适的实施方案?

    我的程序是由autoconf/autotools/gcc构建的,冲突的库是 libclntsh

    编辑:链接如下:libclntsh.so->A.so->主<-B.so<-利布索

    2 回复  |  直到 17 年前
        1
  •  10
  •   Martin v. Löwis    17 年前

    -Bdirect 用于共享库。这将记录找到它们的共享库中的所有符号;如果在运行时出现符号的第二个定义(来自另一个共享库),则该符号将被忽略。

        2
  •  4
  •   Josh Kelley    17 年前

    一个解决方案是设置 LD_PRELOAD 将环境变量添加到符号应优先的库中。(如果该库有自己的共享库依赖项,则可能需要预加载其所有依赖项;只需设置 预载 以空格分隔的从属库列表。)