2013-04-08 92 views
1

以下是我的鏈接命令:如何檢查生成的DLL是靜態還是動態鏈接?

Running Mkbootstrap for XML::SAX::ExpatXS() 
    C:\Perl\bin\perl.exe -MExtUtils::Command -e chmod -- 644 ExpatXS.bs 

link -out:blib\arch\auto\XML\SAX\ExpatXS\ExpatXS.dll -dll -nologo -nodefaultlib -debug -opt:ref,icf -libpath:"C:\Perl\lib\CORE" -machine:x86 ExpatXS.obj -def:ExpatXS.def 
Creating library blib\arch\auto\XML\SAX\ExpatXS\ExpatXS.lib and object blib\arch\auto\XML\SAX\ExpatXS\ExpatXS.exp 

使用的編譯標誌/Zi /GF /MD -c

我想知道,如果這個dll越來越靜態或動態鏈接。我提到了http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx,但編譯器在我的makefile中指定它們時會忽略這些選項。

感謝

回答

2

你的代碼片段只顯示建立的DLL,它沒有提及使用DLL的程序。哪種方式可以選擇使用DLL。

如果你不知道那麼一個簡單的方法來找出是在EXE上運行Dumpbin.exe /imports。您將看到輸出中列出的實際使用的DLL的輸出。如果你沒有看到任何東西,那麼DLL只能被動態加載。或根本沒有。調試器會顯示加載到進程中的DLL的通知,您將在「輸出」窗口中看到它們。

2

下載Windows Dependency Walker的副本,啓動它並裝載新鮮出爐的DLL。

它會顯示您的dll導入的所有DLL。如果其中一個導入的名稱爲msvcr<blah>.dll(例如,msvcrt.dllmsvcr90.dll —就是圖片),那麼它將在dll中使用c-runtime(順便說一句,這是dll的建議)。