簡體   English   中英

鏈接器從哪里獲得庫名稱?

[英]Where does the linker get library names?

我是開發的新手,我想知道鏈接器如何獲取庫名? 例如,在鏈接程序添加行中,當我想添加對libxml2的支持時,命令為-lxml2。 但是,當我想為xmlsec添加庫時,它是-lxmlsec1。 當我想添加openssl時,我同時需要-lcrypto和-lssl。 有人可以向我解釋這些庫名的來源嗎? 似乎不是很直觀。 如果我想包括一個庫,我應該如何找到要使用的-l命令? 這是在開發C ++程序的ubuntu系統上。

“常規”鏈接器是我所知的最笨的程序:)對於庫,它遵循一組非常簡單的規則。 首先,對於每個-l規則,它在前面添加lib並在最后添加.a以形成靜態庫名稱。 它還通過添加.so而不是.a來形成動態庫名稱。 對於每個-I規則,它都會向其庫搜索路徑添加指定的路徑。

因此,當它看到-l規則並查看由-L規則設置的所有庫路徑時(按在命令行中出現的順序),並查看它是否可以在此位置找到動態或靜態庫(如果可以)看到兩者,則根據-B規則選擇一個)。

這是一個通用的介紹。 現在,對於您的特定問題,為了檢查您應該包括哪個庫,您應該閱讀文檔。 我總是告訴您您需要哪個-l規則。

暫無
暫無

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

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