著作: 蕭沖

自從有dll這種動態連接庫後,lib檔就不再代表是過去dos時代的static lib 了。

給 dll 用的lib,特稱為 import lib,有別於 static lib。import lib 裡記錄的是關於會使用到哪些函式,但其實裡面沒有實作函式的機器碼。 相反的,static lib 是含有程式碼於其中,所以通常檔案也比較大。

但要如何的從一個副檔名lib,來判別他是哪一類呢? 有幾個方法:

1/ 目視法: 看檔案的大小,一般40k以上應該就是 static lib。但當然不夠精準
2/ 用工具/程式把內容dump出來: 以 vc 寫的lib來說: 可在cmd模式下: type foo.lib | find "obj"
上面的例子是假設lib檔叫foo。如果有找到內含obj的東西,那就是static的了
3/ 若是bcb寫出來的omf格式,那就要用tdump去看裡面的實作(但這也要一點經驗)

一但知道lib檔是哪一類的後,就可以知道是否可以使用 omf2coff 的工具來轉。此工具主要是用在轉import lib,而非static lib的。

註: lib 檔裡的實作也有可能是混合式的,也就是一方面有import lib的記錄,一方面也有實作其他的程式碼。以opencv中的CVHAARTRAINING.lib檔就是這樣的混合式,它也造成了一比如說fopen就會出錯的情形(因為fopen並沒有參照到stdlib,而是參照到這個lib,而產生找不到dll。當然前題是誤把它當成import lib 透過omf2coff轉來使用時)

arrow
arrow
    全站熱搜

    aftcast 發表在 痞客邦 留言(0) 人氣()