【问题标题】:How to check if dll generated is statically or dynamically linked?如何检查生成的dll是静态链接还是动态链接?
【发布时间】:2013-04-08 05:09:56
【问题描述】:

以下是我的链接命令:

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 中指定这些选项时,编译器会忽略它们。

谢谢

【问题讨论】:

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


    【解决方案1】:

    您的 sn-p 只显示正在构建的 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来做)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        • 2010-09-30
        • 2010-09-23
        相关资源
        最近更新 更多