簡體   English   中英

為什么 gcc linker 選擇舊版本的共享庫?

[英]why does gcc linker choose older version of shared lib?

我很困惑。 我在 /lib /lib/libssl.so.6有 2 個版本的 libssl.so:/lib/libssl.so.4 和/lib/libssl.so.4

這是一個精簡的最小示例——我將“無”與 libssl 鏈接——結果是它鏈接到libssl.so.4 是什么決定了這一點?

 $ g++ -o foo.so -shared -lssl

 $ ldd foo.so |grep ssl
 libssl.so.4 => /lib/libssl.so.4 (0xf7f04000)

選項-lssl指示 linker 查找名為libssl.solibssl.a的文件。 如果您只有libssl.so.4libssl.so.6 ,那么您將遇到 linker 錯誤。

在庫目錄中的某個位置(可能在 /lib)中查找名為“libssl.so”的符號鏈接。

選項-lssl查找linker庫名稱,在這種情況下為libssl.so 通常 libssl.so 將是指向soname庫或real庫的符號鏈接,實際鏈接已完成。 您應該將libssl.so符號鏈接重新指向使用 lib 的正確版本。

更多關於共享圖書館命名的信息,您可以在此處閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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