[solved] qmake: build a dll and its .lib for MSVC
-
Dear QT gurus, I'm trying to build (with msvc) a dynamic library and would like to import it in another project compiled with Microsoft Visual C++ too.
@TEMPLATE = lib
CONFIG += dll
TARGET = mylib
VERSION = 1.0@
I searched across different forums and did find that I should add QMAKE_LFLAGS += /IMPLIB:mylib.lib my .pro file.
People say that it just need the /implib switch to be present in the link command line of the MSVC project.Could someone confirm that I am doing this right?
Thanks a lot. -
Ok thanks for the clarification.
-
Erm ... huh?
Isn't the most portable way the default one? With QMake there's no difference when linking libraries/dlls with gcc or msvc.
Just adding a new lib directory with
@LIBS += -L../myfancydll/debug@and linking it with
@LIBS += -lmyfancydll@??
-
With LIBS you specify the libraries that your project will link against.
This is not what I wanted to do. -
I just read the description
[quote author="neFAST" date="1303579517"]Dear QT gurus, I'm trying to build (with msvc) a dynamic library and would like to import it in another project compiled with Microsoft Visual C++ too.[/quote]And there the "normal way" is in the dynamic library:
Doing exports by defining a MYFANCYDLL_EXPORTS which defines MYFANCYDLL_API to either __declspec(dllimport) or __declspec(dllexport).And linking this one in the application which is using the dynamic lib with:
LIBS += -LC:\mysources\myfancydll -lmyfancydllIf you're doing something special I may have misunderstood your question. I've never needed the /implib thing for anything :)
-
Ok maybe the sentence was not clear (but dword undestood)
Ok I want to import this lib in another project, and I already know how to do that.
But I need to export it first when building the dll. -
Ok, but you know how the symbols are exported?
---- If you don't know: ----
In the dll project, create a "exports.h" (or call it whatever you like)
It should have the following contents:
@#ifdef MYFANCYDLL_EXPORTSdefine MYFANCYDLL_API __declspec(dllexport)
#else
define MYFANCYDLL_API __declspec(dllimport)
#endif@
In your myfancydll.pro, add
@DEFINES += MYFANCYDLL_EXPORTS@Every class which should be exported should be written like the following:
@#include "exports.h"class MYFANCYDLL_API MyExportedClass
{
public:
void someFunction();
}@When writing this way, a .lib file will be generated automatically, there's also no need for creating a .def file. By the way: Qt does the linkage the same way, see the Q_GUI_EXPORT in every QtGui class definition.
If you already know this stuff, just ignore this reply :)