http://asawicki.info/ Graphics programming, game programming, C++, games, Windows, Internet and more...
Generating LIB File for DLL Library
I've been recently trying to use libVLC - functionality of great, codec-less VLC media player enclosed in form of DLL library. By the way I've came across a great article: GenerateLibFromDll and now I know how to generate LIB file for any DLL library! Here is detailed description of the problem:
When you have a DLL library you want to use in your C++ code, you may do it dynamically by using LoadLibrary and GetProcAddress functions from WinAPI, but it's more convenient to do it statically. But it's not enough to just #include signatures of library functions and use them in your project. You also need to link with some LIB file, even if the file is not a real static library with compiled code, but only a few-kilobyte-long list of imported functions. I believe that's just another flaw of C++ language, because other languages like for example C# don't need this even when importing functions from native DLL libraries.
If you have some SDK prepared for Visual C++ or compile the library by yourself, you also get the LIB file next to DLL. But if you have only the library, that article shows following steps to generate matching LIB:
1. From Start menu run "Visual Studio Command Prompt".
2. Execute command:
dumpbin /exports DLL_FILE.dll > DEF_FILE.def
This command prints some information about given DLL library in textual form to its standard output. We redirect it to a text file with DEF extension. But to make it real DEF file, we need to edit it.
3. Open DEF_FILE.def in some text editor and edit it to contain only the names of exported functions in form of:
4. From the Visual Studio Command Prompt, execute another command:
lib /def:DEF_FILE.def /out:LIB_FILE.lib /machine:x86
And there you have it! The so much required LIB file generated from DLL library. You only need signatures of these functions with proper parameters and return values declared in some H header file and you can successfully use your DLL by linking with LIB file created by yourself :)