某些平臺(tái)要求您為鏈接程序提供共享庫(kù)的外部符號(hào)列表。但是,在大多數(shù)unixish系統(tǒng)上,這不是必需的:默認(rèn)情況下,所有非靜態(tài)符號(hào)都將可用。我的理解是,GNU工具鏈可以選擇性地將可見性限制為明確聲明的符號(hào)。如何使用GNU ld來(lái)實(shí)現(xiàn)?
3 回答

瀟湘沐
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為最簡(jiǎn)單的方法是將-fvisibility=hiddengcc選項(xiàng)添加到gcc選項(xiàng)中,并在代碼中顯式公開某些符號(hào)的可見性(by __attribute__((visibility("default"))))。請(qǐng)參閱此處的文檔。
可能有一種方法可以通過(guò)ld鏈接程序腳本來(lái)實(shí)現(xiàn),但是我對(duì)此并不了解。

慕的地8271018
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
生成的用于調(diào)用任何導(dǎo)出的函數(shù)或使用任何導(dǎo)出的全局代碼的代碼比未導(dǎo)出的代碼效率低。有一個(gè)額外的間接級(jí)別。這適用于在編譯時(shí)可能導(dǎo)出的任何函數(shù)。gcc仍會(huì)為鏈接器腳本以后未導(dǎo)出的函數(shù)產(chǎn)生額外的間接調(diào)用。因此,使用可見性屬性將產(chǎn)生比鏈接腳本更好的代碼。
- 3 回答
- 0 關(guān)注
- 569 瀏覽
添加回答
舉報(bào)
0/150
提交
取消