使用NMAKE进行VC ++ DLL编译

时间:2014-06-16 09:10:01

标签: c++ dll linker nmake cl

我有一个使用Visual Studio 2005编译的DLL文件,当我从C#程序调用这些函数(在DLL中)时,它工作得很好。但是如果我使用NMAKE编译相同的程序,它会成功编译,但它不适用于C#程序。我得到“ DLL未找到异常”或“ DLL已损坏”。

P.S:我从原始项目文件中复制了所有编译器选项和链接器选项,并在 MakeFile 中使用它但仍然没有用。我在这里错过了什么?

编译器和链接器选项如下:

Compiler opt: /O2 /Ob1 /D "WIN32" /D "NDEBUG" /D "_WRITE_LOGS" /D "_VC80_UPGRADE=0x0700" /D "_WINDLL" /D "_MBCS" /Fo"obj\\" /FD /EHsc /MD /W3 /nologo /c /Gz /TP /errorReport:prompt 

Linker opt: /OUT:"dll/XXX.dll" /INCREMENTAL:NO /NOLOGO /DLL /DEF:"src\XXX.def" /DELAY:UNLOAD /MACHINE:X86 /ERRORREPORT:PROMPT mqrt.lib ..(other lib files)..

编辑:如果我使用 dumpbin ,使用NMAKE编译的DLL中的“HEADERS”,“EXPORTS”,“SYMBOLS”的大小都比DLL少用Visual Studio编译!

1 个答案:

答案 0 :(得分:0)

我发现了自己的错。我只是没有包含实际编译的一部分。我猜的重要部分。

将清单文件嵌入DLL

Mt.exe 文件是生成签名文件和目录的工具。我找到了this link,它非常有用。

P.S:我学会了这个。编译DLL的三个重要部分是

  • 编译器(CL.EXE)
  • LINKER(LINK.EXE)
  • 嵌入清单(MT.exe)