1. 程式人生 > >GNU的strong symbol和weak symbol

GNU的strong symbol和weak symbol

一個 glib 根據 pos ati mic 例子程序 來看 int

首先,同樣的原型的兩個函數在連個不同的c文件中都有定義,把這兩個c文件編譯、連接在一起,也沒有什麽錯誤。原因就是因為,gcc中有一個strong symbol和weak symbol的概念。默認函數定義都是strong symbol的,兩個相同的strong symbol連接在一起,肯定會產生”symbol重復定義”的錯誤。

但是,這裏我們將weak_symbol.c中的common_print加了weak屬性,這樣gcc再選擇的時候優先選擇strong symbol

2) 其次,根據例子程序執行的結果來看,執行了strong_symbol.c中的common_print函數。如果我們在strong_symbol.c中不提供common_print函數的實現,那麽調用的就是weak_symbol.c中的實現。

3) 由上,我們可以想象,要用c語音提供一個api庫的時候,我們可以把這些api都聲明為weak屬性的,作為一個default實現。當用戶想要自己定制的時候,也就很容易實現了。glibc中的很多api就是這樣設計的。

GNU的strong symbol和weak symbol