如何使用MSVC来构建从命令行一个DLL在Windows如何使用MSVC来构建从命令行一个DLL在W

2019-06-14 12:27发布

我已经做下约20年,但我从来没有建立了一个DLL; 我总是者优先静态链接。

我使用命令行 - cl.exe时,等等 - 和gnumake的makefile文件,建立我的Windows应用程序。

现在我想建立一个DLL,我很困惑。

最终,我将结束与既有的.lib和一个.dll。 所述的.lib包含在运行时加载DLL,并使用其中的代码存根代码。

我一直在寻找的lib和链接命令行,它到底是不是明白我什么是应该做,产生这种输出。

所以,我有一些问题;

CL是否需要任何额外的参数,以表明它是一种编译一个DLL? (我知道DLL导出原型需要__declspec(dllexport)的)。

我知道链接需要/ DLL作为参数。

我将运行lib 链接,产生的.lib分别.dll或将链接产生两者兼而有之?

我需要知道什么?

Answer 1:

在命令行中使用:

cl.exe /LD <files-to-compile>

或者,如果你喜欢更详细和明确的版本:

cl.exe /D_USRDLL /D_WINDLL <files-to-compile> <files-to-link> /link /DLL /OUT:<desired-dll-name>.dll


Answer 2:

原来,它会自动发生。

如果您已导出功能(例如/导出,__declspec(dllexport)的,等等)的连接器会自动生成的.lib文件(你当然需要链接器命令行上/ DLL)。



Answer 3:

Simlar到Ebow哈尔姆的答案,但使用DEF文件用于列出导出的函数和新的命令行参数:

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat" && cl /O2 /Iall /Iyour /Iincludes /D_USRDLL /D_WINDLL /DOTHER_DEFINES <libs> <source files> /LD /Fe<dll name> /link /DEF:<def name>.def

参考文献:

  • https://msdn.microsoft.com/en-us/library/34c30xs1.aspx
  • https://msdn.microsoft.com/en-us/library/19z1t1wy.aspx


Answer 4:

CL是否需要任何额外的参数,以表明它是一种编译一个DLL? (我知道DLL导出原型需要__declspec(dllexport)的)。

事实上,自WIN3X走了,现在你只只需要或者__declspec(dllexport)或定义你想导出的符号的名称.def文件。 .def文件允许您与修改名称导出符号,所以它仍然可以在特殊情况下非常有用。

我知道链接需要/ DLL作为参数。

是的。

我将运行lib和链接,产生的.lib分别.dll或将链接产生两者兼而有之?

LIB仅用于创建静态库(或.objs添加到您的IMPLIB)链接将同时生产一个.dll并为其导入的.lib。



Answer 5:

找出最简单的方法就是让你在那里,只要你想设置一切MSVC项目,然后启用日志记录生成,使构建和分析buildlog所有的命令及其参数。



文章来源: How to build a DLL from the command line in Windows using MSVC