自动选择静态库中的.o文件(.a文件)
Automatic selection of .o file in static library (.a file)
我正在开发一个静态库 (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,而不是 bar,则在 libfb.a 中使用 foo.o;
- 如果 prog.c 调用 bar 但不调用 foo,则在 libfb.a 中使用 bar.o;
- 如果 prog.c 同时调用 foo 和 bar,则 libfb.a 使用 foobar.o。
我试图使用弱符号和弱别名来做到这一点,但没有奏效。也许这是不可能的。有什么想法可以做到吗?
重复@A.Monti 的评论作为回答。
这不可能。您无法检测 prog.c 何时使用可用原语同时调用 foo 和 bar。
我正在开发一个静态库 (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,而不是 bar,则在 libfb.a 中使用 foo.o;
- 如果 prog.c 调用 bar 但不调用 foo,则在 libfb.a 中使用 bar.o;
- 如果 prog.c 同时调用 foo 和 bar,则 libfb.a 使用 foobar.o。
我试图使用弱符号和弱别名来做到这一点,但没有奏效。也许这是不可能的。有什么想法可以做到吗?
重复@A.Monti 的评论作为回答。
这不可能。您无法检测 prog.c 何时使用可用原语同时调用 foo 和 bar。