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」 –