首先 --whole-archive 和 --no-whole-archive 是ld專有的指令行參數,gcc 并不認識,要通gcc傳遞到 ld,需要在他們前面加-Wl,字串。
--whole-archive 可以把 在其後面出現的靜态庫包含的函數和變量輸出到動态庫,--no-whole-archive 則關掉這個特性。
比如你要把 liba.a libb.a libc.a 輸出到 libabc.dll(或libabc.so)時應該這麼寫:
libabc.dll:liba.c libb.a libc.a
gcc -shared -o $@ -L. -Wl,--whole-archive -la -lb -lc -Wl,--no-whole-archive
在--whole-archive作用下的庫裡不能有函數同名。