自动选择静态库中的.o文件(.a文件)

时间:2017-02-16 09:26:44

标签: linux static-libraries ld

我正在开发一个静态库(libfb.a)文件,其中包含两个函数的多个实现:

  • foo.c包含void foo() { ... }
  • bar.c包含void bar() { ... }
  • foobar.c包含void foo() { ... }void bar() { ... }

所有3个实现(...)都不同,因为如果需要 foo bar ,则可以更有效地实现这两个实现彼此。

如何将.o文件合并到GNU ld将自动选择的.a文件中,即gcc prog.c libfb.a

  • 如果prog.c调用 foo ,则在libfb.a中使用foo.o,但不是 bar ;
  • 如果prog.c调用 bar ,则在libfb.a中使用bar.o,但不是 foo ;
  • 如果prog.c同时调用 foo bar ,则使用foobar.o和libfb.a。

我试图用弱符号和弱别名来做,但它没有用。也许这是不可能的。有什么想法可以做到吗?

1 个答案:

答案 0 :(得分:0)

重复@ A.Monti的评论作为答案。

这是不可能的。您无法使用可用的基元检测 prog.c何时调用foo和bar