Problem building qtbase from source
-
To build qtbase, you have to call configure. qmake is built as part of the bootstrap process.
@SGaist Thanks again SGaist - my apologies for all the questions, but is the procedure for building sources that come from the downloaded .run file (e.g qt-opensource-linux-x64-5.14.2.run) documented somewhere? As you suggest, I now run ./configure (instead of qmake directly), but still have problems.
When I execute qt-opensource-linux-x64-5.14.2.run on my ubuntu 18.04 system, it places files including sources and shared libraries in $HOME/Qt5.14.2.. I can link my application with the shared libraries in $HOME/Qt5.14.2/5.14.2/gcc_64/
Now I want to modify some source files in Qt5.14.2 qtbase
% cd 5.14.2/Src/qtbase % ./configure # builds (and runs?) qmake, generates Makefile
Now if I run ‘make’ it successfully runs to completion. If I modify a qtbase source file and run ‘make’ again, it successfully builds. However ‘make’ rebuilds the libraries in 5.14.2/Src/qtbase/lib - but my app is linking with 5.14.2/gcc_64/lib. How do I “install” the rebuilt libraries into that directory? Is it ‘make install’? I tried “make install”, but it fails:
% make install cd src/ && ( test -e Makefile || /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -o Makefile /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/src.pro ) && make -f Makefile install make[1]: Entering directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src' cd tools/bootstrap/ && ( test -e Makefile || /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -o Makefile /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap/bootstrap.pro ) && make -f Makefile install make[2]: Entering directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap' /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -install qinstall ../../../lib/libQt5Bootstrap.a /usr/local/Qt-5.14.2/lib/libQt5Bootstrap.a Error copying ../../../lib/libQt5Bootstrap.a to /usr/local/Qt-5.14.2/lib/libQt5Bootstrap.a: Destination file exists Makefile:14154: recipe for target 'install_target' failed make[2]: *** [install_target] Error 3 make[2]: Leaving directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap' Makefile:82: recipe for target 'sub-bootstrap-install_subtargets' failed make[1]: *** [sub-bootstrap-install_subtargets] Error 2 make[1]: Leaving directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src' Makefile:62: recipe for target 'sub-src-install_subtargets' failed make: *** [sub-src-install_subtargets] Error 2
If I just manually copy all libraries from 5.14.2/Src/qtbase/lib to 5.14.2/gcc_64/lib, then link my application with those, it gives this error:
/home/oreilly/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Qml.so: undefined reference to `operator delete[](void*, unsigned long)@Qt_5' /home/oreilly/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Quick.so: undefined reference to `operator delete(void*, unsigned long)@Qt_5' collect2: error: ld returned 1 exit status Makefile:373: recipe for target 'mbgrdviz-2' failed
So I am still missing something...
-
@SGaist Thanks again SGaist - my apologies for all the questions, but is the procedure for building sources that come from the downloaded .run file (e.g qt-opensource-linux-x64-5.14.2.run) documented somewhere? As you suggest, I now run ./configure (instead of qmake directly), but still have problems.
When I execute qt-opensource-linux-x64-5.14.2.run on my ubuntu 18.04 system, it places files including sources and shared libraries in $HOME/Qt5.14.2.. I can link my application with the shared libraries in $HOME/Qt5.14.2/5.14.2/gcc_64/
Now I want to modify some source files in Qt5.14.2 qtbase
% cd 5.14.2/Src/qtbase % ./configure # builds (and runs?) qmake, generates Makefile
Now if I run ‘make’ it successfully runs to completion. If I modify a qtbase source file and run ‘make’ again, it successfully builds. However ‘make’ rebuilds the libraries in 5.14.2/Src/qtbase/lib - but my app is linking with 5.14.2/gcc_64/lib. How do I “install” the rebuilt libraries into that directory? Is it ‘make install’? I tried “make install”, but it fails:
% make install cd src/ && ( test -e Makefile || /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -o Makefile /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/src.pro ) && make -f Makefile install make[1]: Entering directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src' cd tools/bootstrap/ && ( test -e Makefile || /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -o Makefile /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap/bootstrap.pro ) && make -f Makefile install make[2]: Entering directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap' /home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/bin/qmake -install qinstall ../../../lib/libQt5Bootstrap.a /usr/local/Qt-5.14.2/lib/libQt5Bootstrap.a Error copying ../../../lib/libQt5Bootstrap.a to /usr/local/Qt-5.14.2/lib/libQt5Bootstrap.a: Destination file exists Makefile:14154: recipe for target 'install_target' failed make[2]: *** [install_target] Error 3 make[2]: Leaving directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src/tools/bootstrap' Makefile:82: recipe for target 'sub-bootstrap-install_subtargets' failed make[1]: *** [sub-bootstrap-install_subtargets] Error 2 make[1]: Leaving directory '/home/oreilly/Qt5.14.2/5.14.2/Src/qtbase/src' Makefile:62: recipe for target 'sub-src-install_subtargets' failed make: *** [sub-src-install_subtargets] Error 2
If I just manually copy all libraries from 5.14.2/Src/qtbase/lib to 5.14.2/gcc_64/lib, then link my application with those, it gives this error:
/home/oreilly/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Qml.so: undefined reference to `operator delete[](void*, unsigned long)@Qt_5' /home/oreilly/Qt5.14.2/5.14.2/gcc_64/lib/libQt5Quick.so: undefined reference to `operator delete(void*, unsigned long)@Qt_5' collect2: error: ld returned 1 exit status Makefile:373: recipe for target 'mbgrdviz-2' failed
So I am still missing something...
-
@Tom-asso Since you're you're installing into /usr/local you should call make install with sudo.
-
Note that if you want to hack on Qt itself, you can use the developer-build and it will do an in place build. However it should not be used to build software releases as it toggles some flags for development.
-
Note that if you want to hack on Qt itself, you can use the developer-build and it will do an in place build. However it should not be used to build software releases as it toggles some flags for development.
@SGaist - could you please explain? What is the "developer build", and what is the "development.3" flag?
I would like to modify qtdatavisualization3d for my app, then freely distribute to users on a non-commercial basis - which source file should I be using in that case?
Thanks! -
The 3 was a typo.
As I wrote, it will trigger an in-place build, meaning that you won't have to call make install each time you want to test your modifications.In that case, you should only build that module rather than the whole of Qt.
-
The 3 was a typo.
As I wrote, it will trigger an in-place build, meaning that you won't have to call make install each time you want to test your modifications.In that case, you should only build that module rather than the whole of Qt.
-
Did you do a build from scratch after adding that option to your configure line ?
With a developer build you should have all binaries in qtbase/bin and the libraries in qtbase/lib.
-
Did you do a build from scratch after adding that option to your configure line ?
With a developer build you should have all binaries in qtbase/bin and the libraries in qtbase/lib.
-
Yes it is to be expected, Qt Creator is a independent project.
-