天天看點

把lib打包到so中

首先 --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作用下的庫裡不能有函數同名。

繼續閱讀