簡體   English   中英

鏈接所有鏈接到公共靜態庫的多個共享庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM