1
在編寫共享庫時,通常建議隱藏所有內部符號以減少動態鏈接時間,通常使用鏈接描述文件或-fvisibility
選項。將靜態庫鏈接到共享庫時應該隱藏符號嗎?
- 內部靜態庫
- 第三方靜態庫(例如,libuv)
所有:
在我的情況下,共享庫兩種類型的其他庫的鏈接使用-Wl,--whole-archive
選項將它們鏈接到共享庫中,以便生成的共享庫自足並且僅鏈接到stdlib。
來自內部靜態庫的所有符號都是隱藏的,因爲它們不是公共API的一部分。
問題是隱藏來自第三方靜態庫的符號有什麼優點和缺點?是否有最佳做法和已知的陷阱?一方面,它們不是我圖書館的公共API的一部分。另一方面,它們是第三方庫的公共API的一部分。
我猜想用戶想要鏈接到另一個版本的同一個第三方庫時會出現問題。理論上隱藏它的符號可能會解決它們,但它認爲在實踐中它可能會導致一些新的意想不到的問題。