0
我正在开发其中包含两个功能的多种实现静态库(libfb.a)文件的.o文件:自动选择静态库(某文件)
- foo.c中包含
void foo() { ... }
。 - bar.c包含
void bar() { ... }
。 - foobar.c包含
void foo() { ... }
和void bar() { ... }
。
所有3个实现(...
)是不同的,因为如果需要两者FOO和酒吧,它们两者可以更有效地实施,使用彼此。
我怎样才能.o文件合并到某文件针对GNU劳工处会做自动选择,即gcc prog.c libfb.a
将libfb.a内
- 使用foo.o的,如果prog.c中调用FOO,但不是bar;
- 在libfb.a中使用bar.o如果prog.c调用bar,但不是foo;
- 使用foobar.o与libfb.a如果prog.c中同时呼吁富和酒吧。
我试图使用弱符号和弱别名做到这一点,但没有奏效。也许这是不可能的。任何想法如何做到?
这是不可能的,你不能相互定义符号(例如,当'prog.c'使用* both *符号时,改变链接)。 另外,一个静态库只是一个'.o'文件集合[在一个档案中](https://en.wikipedia.org/wiki/Ar_(Unix))。 –
@ A.Monti:只用foo.c和foobar.c(no bar.c)就可以解决这个问题,它使用弱别名和.o文件与.a文件的正确排序。如果可能的话,也许foo.c + bar.c + foobar.c也是可能的。 – pts
嗯,的确,你可以使用符号弱点来定义优先级,但是你根本无法使用可用的基元来检测“prog.c调用**兼有** foo和bar” –