如何检查生成的DLL是静态还是动态链接?

时间:2013-04-08 05:09:57

标签: windows dll makefile static-linking dynamic-linking

以下是我的链接命令:

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 个答案:

答案 0 :(得分:2)

下载Windows Dependency Walker的副本,将其启动并加载新制作的dll。

它将显示您的dll导入的所有DLL。如果其中一个导入的名称类似于msvcr<blah>.dll(例如,msvcrt.dllmsvcr90.dll - 你得到了图片),那么它就是在dll中使用c-runtime(顺便提一句) ,是dll推荐的事情)。

答案 1 :(得分:2)

您的代码段仅显示构建的DLL,它没有说明使用DLL的程序。哪种方式可以选择使用DLL。

如果你不知道,那么一个简单的方法就是在EXE上运行Dumpbin.exe /imports。您将看到输出中列出的实际使用的DLL导出。如果您没有看到任何内容,则只能动态加载DLL。或者完全没有。调试器显示加载到进程中的DLL的通知,您将在“输出”窗口中看到它们。