[英]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.so
或libssl.a
的文件。 如果您只有libssl.so.4
和libssl.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.