回覆列表
  • 1 # 使用者218883852808

    這個不能直接用“哪個更好”來下結論吧。Linux 採用 ELF 格式,源頭我不大清楚,似乎是個相當標準化的格式,很多作業系統都用。似乎 ELF 沒有按索引號匯出的功能,裝載器負責給可執行程式填好引入表。很規範,沒什麼好說的。

    DLL 是PE格式,它允許匯出表中沒有名字表。這個就是區別所在了。沒有名字就無法根據名字連結,這種情況下需要 .lib 來協助。不用名字表連結時麻煩一些,但是執行時還是有好處的,載入速度會快一些,也省一點記憶體。另外,windows下靜態庫也是 .lib 。微軟給這兩個不同用途的檔案都用 .lib 字尾真是心大。

    用 dumpbin 看 dll,用 nm 看 so,其實它們的資訊基本上差不多的,但是有的DLL匯出項沒有名字或者有名字的項特別少,so 就不會這樣,它的匯出項都有名字的。看可執行程式也一樣:Windows 的可執行程式引入表是可以簡略名字直接用序號的,對有些 DLL 的匯入項根本沒有名稱(根據最佳化引數而異),只有序號。而Linux 的可執行程式的引入表總是有完整的名稱。

    總的說,在 DLL 沒有做名字表最佳化的情況下(大多如此),.lib 其實並不是必須的,也有工具可以從 DLL 直接生成一個 .lib。但是……我也不知道沒有 .lib 情況下如何 implicit link。

  • 中秋節和大豐收的關聯?
  • 有一天老婆突然告訴你,幾年前你的好哥們兒曾經騷擾過老婆,你該怎麼辦?