[Qt-interest] static linking

John McClurkin jwm at nei.nih.gov
Tue May 26 18:03:12 CEST 2009


Linda Maria wrote:
> Hi all
>  
> I want to statically link my own libs, however, still dynamically 
> linking against Qt. When I do this I get undefined reference error. 
> Well, it is clear that the compiler is not finding my lib/somename/.a 
> file, however, if I compile my library dynamically the compiler has no 
> problem finding /somename/.dll file.
>  
> -I am working with QT 4.5
> -I am working on Windows with Qt Creator
>  
> Example .pro files are as folow:
>  
> lib pro file:
> QT -= gui
> 
> TARGET = hello_world_lib
> 
> TEMPLATE = lib
> 
> CONFIG += staticlib
> 
> DEFINES += HELLO_WORLD_LIB_LIBRARY
> 
> SOURCES += helloworld.cpp
> 
> HEADERS += helloworld.h\
> 
> hello_world_lib_global.h
> 
>  
> 
> app pro file:
> 
> TARGET = hello_world
> 
> TEMPLATE = app
> 
> INCLUDEPATH += ..\hello_world_lib
> 
> CONFIG += static
> 
> LIBS += -L..\hello_world_lib\debug -lhello_world_lib
> 
> TARGETDEPS += ..\hello_world_lib\debug\libhello_world_lib.a
> 
> SOURCES += main.cpp \
> 
> mainwindow.cpp \
> 
> helloworlddialog.cpp
> 
> HEADERS += mainwindow.h \
> 
> helloworlddialog.h
> 
> FORMS += mainwindow.ui \
> 
> helloworlddialog.ui \
> 
> helloworlddialog.ui
> 
>  
> 
> ld output is:
> 
> debug/mainwindow.o(.text+0x1bd): In function 
> `ZN10HelloWorld10MainWindowC2EP7QWidget':
> 
> C:/Documents and Settings/es030699/My 
> Documents/Qt/hello_world/mainwindow.cpp:15: undefined reference to 
> `_imp___ZN13HelloWorldLib10HelloWorld10getMessageEv'
> 
> debug/mainwindow.o(.text+0x3cb): In function 
> `ZN10HelloWorld10MainWindowC1EP7QWidget':
> 
> C:/Documents and Settings/es030699/My 
> Documents/Qt/hello_world/mainwindow.cpp:15: undefined reference to 
> `_imp___ZN13HelloWorldLib10HelloWorld10getMessageEv'
> 
> collect2: ld returned 1 exit status
> 
> mingw32-make.exe[1]: *** [debug\hello_world.exe] Error 1
> 
> C:\MinGW\bin\mingw32-make.exe: *** [debug] Error 2
> 
> Exited with code 2.
> 
> Error while building project hello_world
> 
> When executing build step 'Make'
> 
>  
> 
> Notice the line
> 
> CONFIG += staticlib
> 
> in the lib pro file tellst the compiler to create libhello_world_lib.a 
> to statically link agains, and not to create hello_world_lib.dll. I 
> thought the compiler should automatically find out that only a static 
> library is provided and link against it.
> 
>  
> 
> Can someone please help me with this?
> 
> Thanks,
> 
> Linda Maria 
> 

I do what you are trying to do routinely on both Windows and Linux. 
However, in my library .pro files, I have
CONFIG += static
not staticlib.
You might look at the Makefiles that are generated by qmake and see what 
they look like.



More information about the Qt-interest-old mailing list