代码之家  ›  专栏  ›  技术社区  ›  JustWe

链接时如何覆盖现有符号?

  •  0
  • JustWe  · 技术社区  · 4 年前

    我喝了两杯酒 A B 具有相同的功能 same_func ,我不想修改 A. 要删除的代码 same_fun 在里面 A. 但在链接时覆盖该符号。有什么方法可以表明 功能在 B 如果符号冲突,则优先选择优先级较高的库。

    0 回复  |  直到 4 年前
        1
  •  1
  •   the busybee    4 年前

    命令行上库的顺序通常决定。将库“B”放在库“A”之前。

    如果您的申请中引用了 same_func() 如果你将库“B”设置为第一个,链接器会将其解析为B same_fun() 。由于引用现在已解析,与库“A”链接只会解析尚未解析的引用。

        2
  •  0
  •   techgreed    4 年前

    一个更安全的解决方案可能是将libA中的所有或相关符号设置为“弱”。您可以使用选项--weather对objcopy执行此操作。这将确保链接器从libB中选择定义(如果它在A和B中都可用)。 另一种解决方案是使用链接器脚本来包含或排除特定对象中的特定部分。