I have a question about library linking and .lib files...
this is the context:
I have created a DLL: MyLib.dll.
To use that library in my QT project, I only have to include an include path, a link to the library and use the header files:
LIBS += "C:\myPath\MyLib.dll"
INCLUDEPATH += "C:\myPath"
HEADERS += \
../myPath/MyLib_global.h \
../myPath/mylib.h
I am using a third party dll in my project: third.dll
If I do the same as in the above example, it does not work:
LIBS += "C:\myPath\third.dll"
The third party DLL comes with a .lib file "third.lib", which I apparently need to use together with the DLL.
Why is that? Why do some DLL libraries need a .lib file but other DLL libraries don't?
Could it be that the .lib is a static library accessing the DLL?
Thanks a lot!
The lib file is an import library file, which allows the final executable to contain an import address table (IAT) by which all DLL function calls are referenced. Basically, allowing the functions to be looked up.
You can read about it here.
To have Qt generate the lib, add this to the .pro: -
CONFIG+= staticlib
Here's some documentation on how to create libraries.
My answer may not be specific to the context but would be useful to most developers asking the same question. This was answered by Anthony Williams
What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?
You don't need a .lib file to use a dynamic library, but without one
you cannot treat functions from the DLL as normal functions in your
code. Instead you must manually call LoadLibrary to load the DLL (and
FreeLibrary when you're done), and GetProcAddress to obtain the
address of the function or data item in the DLL. You must then cast
the returned address to an appropriate pointer-to-function in order to
use it.