Where Is My .lib?
Previously in another article I tried to remember how to use shared libraries on Windows. Now I tried to build and ran into a minor obstacle.
There in the build output directory is the .dll
, but not .lib
. Without it I can't use the library I just built.
As it turned out, I must export the symbols explicitly for the .lib
to get generated. This behavior is the opposite of default GCC visibility attribute behavior. Exporting is simple, simply prefix the class or function I want to make available with EXPORT
, defined like this:
#define EXPORT __declspec(dllexport)
This is shorter to type, and allows EXPORT
to be defined differently for another build target.
Load/Unload Handling
Separately, you may want to run some code when a .dll
is loaded or unloaded. On Windows this is done by defining your own DllMain
function, as documented on MSDN.
Warning C4251
Finally, one of my reasons for using Visual Studio is for debugging support. But I had to ignore warning C4251 when I build, because I use STL classes.
To disable specific warning, alt-F7
to bring up project properties, under C/C++ → Advanced → Disable Specific Warnings, add 4521
to entry field.
Alternatively, understand that DLL interface likes passing buffers so we want to avoid using STL types.