3

以下是我的链接命令:

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

谢谢

4

2 回答 2

2

下载 Windows Dependency Walker的副本,启动它并加载您新创建的 dll。

它将显示您的 dll 导入的所有 DLL。如果其中一个导入具有类似的名称msvcr<blah>.dll(例如,,msvcrt.dllmsvcr90.dll- 你得到了图片),那么它正在使用 dll 中的 c-runtime(顺便说一下,这是 dll 建议做的事情)。

于 2013-04-08T13:24:11.463 回答
2

您的代码片段只显示了正在构建的 DLL,它没有说明使用 DLL 的程序。无论哪种方式都可以选择使用 DLL。

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

于 2013-04-08T13:46:14.780 回答