On Windows you do not link with a . dll file directly – you must use the accompanying . lib file instead. To do that go to Project -> Properties -> Configuration Properties -> Linker -> Additional Dependencies and add path to your .
A Dynamic Link library (DLL) is a library that contains functions and codes that can be used by more than one program at a time. Once we have created a DLL file, we can use it in many applications. The only thing we need to do is to add the reference/import the DLL File.
On the command line use:
cl.exe /LD <files-to-compile>
or, if you prefer the more verbose & explicit version:
cl.exe /D_USRDLL /D_WINDLL <files-to-compile> <files-to-link> /link /DLL /OUT:<desired-dll-name>.dll
Turns out it happens automatically.
If you have exported functions (e.g. /export, __declspec(dllexport), etc) the linker will automatically generate the .lib file (you do of course need /dll on the linker command line).
Simlar to Ebow Halm's answer, but using a .def file for listing the exported functions and newer command line arguments:
"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
References:
Does cl need any additional arguments, to indicate it is compiling for a DLL? (I know the DLL exported prototypes need __declspec(dllexport)).
Not since Win3x went away, now you just just need either __declspec(dllexport)
or a .DEF file which defines the names of the symbols you want exported. a .def file allows you to export symbols with modified names, so it can still be useful for special cases.
I know link needs /dll as an argument.
Yep.
Will I run lib and link, to produce the .lib and .dll respectively, or will link produce both?
lib is used only to create static libraries (or to add .objs to your implib) Link will produce both a .dll and an import .lib for it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With