如何使用MSVC从Windows中的命令行构建DLL

35 c windows dll build visual-c++

我已经做了大约20年的C,但我从来没有构建过DLL; 我总是喜欢静态链接.

我使用命令行--cl.exe等 - 和gnumake makefiles来构建我的Windows应用程序.

我现在想构建一个DLL,我很困惑.

最终,我将最终得到.lib和.dll..lib包含存根代码,该代码在运行时加载DLL并使用其中的代码.

我一直在查看lib和link的命令行,但是我不知道应该做什么,产生这个输出.

所以我有一些问题;

cl是否需要任何其他参数,以表明它正在为DLL编译?(我知道DLL导出的原型需要__declspec(dllexport)).

我知道链接需要/ dll作为参数.

我会运行lib link,分别生成.lib和.dll,还是会链接生成两者?

我还需要知道什么?

小智 38

在命令行上使用:

cl.exe /LD <files-to-compile>
Run Code Online (Sandbox Code Playgroud)

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

cl.exe /D_USRDLL /D_WINDLL <files-to-compile> <files-to-link> /link /DLL /OUT:<desired-dll-name>.dll
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,`_USRDLL`和`_WINDLL`不是必须的,只需使用`/ LD`而不通过`/ link`传递`/ DLL`,`/ OUT`到链接器. (3认同)
  • 注意:/LD 区分大小写,与 Windows 程序中的许多其他选项不同。 (2认同)

小智 6

原来它会自动发生。

如果您有导出函数(例如 /export、__declspec(dllexport) 等),链接器将自动生成 .lib 文件(您当然需要在链接器命令行上使用 /dll)。


ere*_*nce 5

类似于 Ebow Halm 的回答,但使用 .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
Run Code Online (Sandbox Code Playgroud)

参考: