Building Static Qt
-
Hi, I wanted to build static qt instead of shared mod on linux so I downloaded qt 5.5.1 everywhere (source code) and I installed the stuff on this page on both ubuntu and fedora:
https://wiki.qt.io/Building_Qt_5_from_Git
I extracted the zip file and opened terminal in the folder and ran this:
./configure -platform linux-g++ -static -releasethe configuration was successful and It told me to run make so I ran make and these errors happened (this is on ubuntu but it was similar to this o fedora):
g++ -Wl,-O1 -fuse-ld=gold -Wl,--enable-new-dtags -o chatserver .obj/main.o .obj/chatserver.o .obj/websocketclientwrapper.o .obj/websockettransport.o .obj/chatserver_plugin_import.o .obj/moc_chatserver.o .obj/moc_websocketclientwrapper.o .obj/moc_websockettransport.o -L/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebsockets/lib -lQt5WebSockets -L/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtbase/lib -L/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebchannel/lib -lQt5WebChannel -L/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtdeclarative/lib -lQt5Qml -L/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtbase/plugins/bearer -lqconnmanbearer -lqgenericbearer -lqnmbearer -lQt5Network -lQt5DBus -lQt5Core -lz -licui18n -licuuc -licudata -lpcre16 -lm -ldl -lgthread-2.0 -pthread -lglib-2.0 -lrt -lpthread
/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtdeclarative/lib/libQt5Qml.a(qqmldebugserver.o):qqmldebugserver.cpp:function QQmlDebugServerThread::run(): error: undefined reference to 'QTcpServerConnection::QTcpServerConnection()'
/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtdeclarative/lib/libQt5Qml.a(qqmldebugserver.o):qqmldebugserver.cpp:function QQmlDebugServerThread::run(): error: undefined reference to 'non-virtual thunk to QTcpServerConnection::setServer(QQmlDebugServer*)'
collect2: error: ld returned 1 exit status
Makefile:105: recipe for target 'chatserver' failed
make[4]: *** [chatserver] Error 1
make[4]: Leaving directory '/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebchannel/examples/webchannel/chatserver-cpp'
Makefile:47: recipe for target 'sub-chatserver-cpp-make_first' failed
make[3]: *** [sub-chatserver-cpp-make_first] Error 2
make[3]: Leaving directory '/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebchannel/examples/webchannel'
Makefile:42: recipe for target 'sub-webchannel-make_first' failed
make[2]: *** [sub-webchannel-make_first] Error 2
make[2]: Leaving directory '/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebchannel/examples'
Makefile:69: recipe for target 'sub-examples-make_first' failed
make[1]: *** [sub-examples-make_first] Error 2
make[1]: Leaving directory '/home/shahriar/Desktop/qt-everywhere-opensource-src-5.5.1/qtwebchannel'
Makefile:459: recipe for target 'module-qtwebchannel-make_first' failed
make: *** [module-qtwebchannel-make_first] Error 2these are the last lines of make after waiting an hour. what sould I do to fix this problem?
-
hi
you can try with
-nomake demos -nomake examples
with ./configure (add to what u used)
to skip the samples as it seems error in there. -
Hi, you were right @mrjj
I used this configuration and then used make:./configure -static -developer-build -opensource -platform linux-g++ -opengl desktop -nomake examples -nomake tests
and it didn't seem to have any errors.
Now how do I use this to build my projects staticly?
I know that there are two ways to do this. the first one is useing qmake from terminal and the second one is from qt IDE itself. the second way is easier so if anyone knows how to do this please tell me
thanks in advance and thank you @mrjj -
Hi,
Add that version of Qt to Qt Creator in the Build and Run panel and make a kit using it.
On a side note, unless you plan to fix things / add features to Qt, you should drop the -developer-build option.
Also, don't forget the licensing implication coming with a static build.
-
Hi, @SGaist thank you for helping
alright so I did what you said and added the kit and built a very sipmple project in release mode but the size of the executable was 218 mb!!!so I built qt in static and release mode to see if the problem is because of the developer build. this is the config:
./configure -static -release -prefix /run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1 -opensource -platform linux-g++ -opengl desktop -nomake examples -nomake tests
the perfix path is the same as the source path
these are the last lines of building in release with gmake:
/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtimageformats/plugins/imageformats/libqjp2.a(jas_stream.o):jas_stream.c:function jas_stream_tmpfile: warning: the use of
tmpnam' is dangerous, better use
mkstemp'
gmake[3]: Leaving directory '/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtquick1/tools/qmlplugindump'
/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtimageformats/plugins/imageformats/libqjp2.a(jas_stream.o):jas_stream.c:function jas_stream_tmpfile: warning: the use oftmpnam' is dangerous, better use
mkstemp'
gmake[3]: Leaving directory '/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtquick1/tools/qml'
gmake[2]: Leaving directory '/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtquick1/tools'
gmake[1]: Leaving directory '/run/media/shahriar/Mine/Qt-release/qt-everywhere-opensource-src-5.5.1/qtquick1'and I added the kit like you said and qt IDE gave me this warning:
Non-installed -prefix build - for internal developement only
what is this? is this OK?
-
You have to call make install.
And you shouldn't put the prefix in the sources, there's nothing to gain from that.
-
Hi @SGaist
thank you it worked fine. on last thing:there is a warning under the kit in qt that says no qmlscene installed. will I have problem deploying quick applications?
-
Hi and thank you all for helping. there only remains the licence issue. I think as long as I keep my apps open source there is no problem with releasing static apps
-
As long as you abide by the GPL, you're good.