2010-08-25 118 views

回答

23

-fvisibility=hidden使所有符號隱藏默認

然後,您需要做的是選擇哪些功能,您希望用戶可以看到鏈接到您的庫的用戶,並通過用可見屬性標記它們使其可見。

E.g.

void __attribute__((visibility("default"))) Exported() 
{ 
    // ... 
} 
+0

謝謝。這真的有幫助。 – nixgadgets 2010-08-25 23:45:18

+2

自然你會想創建一個像'MYLIB_PUBLIC'或類似的宏來使這個更清潔。 – 2014-01-27 13:53:12

3

它減少了對共享對象私有的保留不必要的符號信息。

考慮一個具有超過10,000個符號(函數/全局變量)的共享對象,但其中只有100個是可從庫用戶訪問的公共函數。我們可以將其餘的9,900個符號的其他&作爲唯一可見的100個函數作爲私有。

它也會減少共享對象的大小,因爲它是一個重定位表將只有100個符號信息。使用該標誌以及-ffunction-sections -fdata-section將通過具有與該100個符號相關的定義來進一步減小共享對象大小。