[英]Linking against multiple shared libraries that all linked against a common static library
假設您有兩個共享庫lib1.so和lib2.so,它們都將libcommon.a靜態鏈接到它們中。 如果要動態鏈接lib1.so和lib2.so,編譯器是否會抱怨模糊的符號引用? 或者編譯器是否足夠聰明,知道lib1和lib2之間共享libcommon符號,並允許您動態鏈接兩者?
不會發生沖突,因為鏈接到共享庫時,鏈接器將使用第一個提供符號的共享庫中的定義,而不會進一步查看其他共享庫。 .a中包含的符號將在兩個共享庫中導出,但不會發生沖突。
靜態庫將用於內部解析鏈接,但外部鏈接不會傳播到共享庫接口,因此不會發生沖突。 每個共享庫都包含自己的靜態庫代碼副本。
假設兩個共享庫與不同的靜態庫鏈接。 但靜態庫都包含一個具有相同名稱的函數。 會有沖突。
我很確定,因為我有一個tcl / tk應用程序,它加載了兩個tcl庫(.so)。 這兩個庫都與openssl庫靜態鏈接。 但是版本不同。 運行tcl應用程序時發生分段錯誤。 我將它追蹤到openssl中。 新版本中更改了功能實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.