代码之家  ›  专栏  ›  技术社区  ›  Steven Behnke

检测/避免g++符号冲突

  •  1
  • Steven Behnke  · 技术社区  · 15 年前

    如果两个共享库都公开相同的全局范围符号,是否有方法可以检测并避免?我们最近遇到了一个 libA.so 出口了 SuperCoolMethod() libB.so 这也暴露了 这会破坏之前的方法。这是在使用g++4.0及更高版本的Linux上实现的。所以如果你和 利巴索 一切都会按预期进行,但只有一次 libB.so公司 添加到图片中时,调用了错误的方法,调用将失败,导致执行线程中止,而不通知我们潜在的问题。经过反复试验,我们终于找到了答案 超冷法() libB.so公司 所以 __attribute__((visibility("hidden"))) 可以应用于他们的复制方法。

    3 回复  |  直到 15 年前
        1
  •  1
  •   mmmmmm    15 年前

    由于这是C++,每个库都应该在自己的命名空间中,所以不会发生冲突。

        2
  •  0
  •   pm100    15 年前

    动态加载库并通过dlopen和dlsym附加符号就可以了。你将不得不写代码来做这件事,但如果你真的陷入困境,这将是一个解决方案

        3
  •  0
  •   Scott Smith    15 年前

    作为一种解决方法,如果您只使用这两种方法中的一种,则它们在 链接 命令行确定最终可执行文件中的函数版本。

    这不仅仅是一个工件,它是定义的行为,因此您可以依赖它(直到供应商修复它)。