2012-03-08 58 views
0

我有一個動態庫A.dll,它使用一個靜態庫B.lib包含一個函數「int foo()」。當我使用dumpbin(在win32上,vs2010)查看dll中的符號 - foo不可見 - 是否預期?或者它是微軟的具體?我在linux上測試了這一點,在linux上並不是這樣。一個靜態鏈接函數是不可見的dll dumpbin輸出

非常感謝您的耐心閱讀。

Kapil。

回答

0

是的,這是預期的。至於導入的符號,使用dumpbin,你可以看到所謂的導入地址表和導入名稱表,一旦至少有一個函數被應用程序導入,這兩個函數都會(通常)存在(在你的情況下是A. DLL)。由於您的應用程序從靜態庫中導入了一個函數(在您的情況下爲B.lib),因此在上述用於B.lib中使用的函數的導入表中存在NO項。一旦庫被STATICALLY鏈接到應用程序,其正文(代碼)就是應用程序的一部分。除了使用dumpbin不可見應用程序的功能外,對於dumpbin,靜態庫的功能不可見!