QT5 build: CC: No such file or directory
-
Ah ha! I set QMAKE_CC and QMAKE_CXX in qtbase/mkspecs/solaris-cc/qmake.conf and that got me going again. Configure went much further this time but now it's stopped with this:
/opt/qt5/qtbase/src/corelib/global/qrandom.cpp: In function ‘void fallback_fill(quint32*, qsizetype)’: /opt/qt5/qtbase/src/corelib/global/qrandom.cpp:297:18: error: ‘getauxval’ was not declared in this scope 297 | ulong base = getauxval(AT_BASE);
Apparently getauxval is some linux thing. There's a discussion around this here: http://lists.opencsw.org/pipermail/users/2019-January/010420.html so unless anyone has a better suggestion, I'll pursue that.
-
I decided the simplest thing was to just remove getauxval since it seemed to be optional anyway. Now we've made more progress. configure is almost finished but ends like this:
...........(long list of files redacted) ...Done. Info: creating super cache file /opt/qt5/qtbase/.qmake.super Info: creating cache file /opt/qt5/qtbase/.qmake.cache ERROR: Invalid value 'test' supplied to command line option 'nomake'. /opt/qt5/qtbase $
-
Isn't it "-nomake tests" ?
-
Good catch - I missed the last character when I copied the command out of the instructions. But now I'm getting the "You cannot make a shadow build from a source tree containing a previous build.
Cannot proceed." message.
Is my only option to delete the entire qt5 directory and start over? I'm not seeing a "confclean" option. -
I'd go with make distclean but I am not sure, I haven't done any in tree build since over a decade. Always out of source, it allows you to keep your sources clean and start from scratch more easily.
-
I'm just following the recipe here: https://wiki.qt.io/Building_Qt_5_from_Git
$ mkdir qt5-build $ cd qt5-build $ ..\\qt5\configure -developer-build -opensource -nomake examples -nomake tests
In any event distclean did not work for me.
/opt/qt5/qtbase $ gmake distclean gmake: *** No rule to make target 'distclean'. Stop. /opt/qt5/qtbase $
Update: Oh dear - I just noticed I somehow ended up in qtbase rather than qt5-build. Why don't I just start over.
-
Well, since you are getting started, it's not a bad idea to just build qtbase. You can then build the rest later on.
-
I just started over from scratch. This time it almost finished:
..Done. Info: creating stash file /opt/qt5/qt5-build/.qmake.stash Info: creating super cache file /opt/qt5/qt5-build/.qmake.super Running configuration tests... Checking for gold linker... yes Checking for valid makespec... ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken. Check config.log for details. /opt/qt5/qt5-build $ cat config.log executing config test use_gold_linker + cd /opt/qt5/qt5-build/qtbase/config.tests && /usr/gcc/10/bin/g++ -fuse-ld=gold -o conftest-out conftest.cpp test config.qtbase.tests.use_gold_linker succeeded executing config test verifyspec + cd /opt/qt5/qt5-build/qtbase/config.tests/common/verifyspec && /opt/qt5/qt5-build/qtbase/bin/qmake -qtconf /opt/qt5/qt5-build/qtbase/bin/qt.conf "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared use_gold_linker console" /opt/qt5/qtbase/config.tests/common/verifyspec + cd /opt/qt5/qt5-build/qtbase/config.tests/common/verifyspec && MAKEFLAGS= /opt/csw/bin/gmake > /usr/gcc/10/bin/g++ -c -O2 -I/opt/qt5/qtbase/config.tests/common/verifyspec -I. -I/usr/sfw/include -I/opt/qt5/qtbase/mkspecs/solaris-cc -o verifyspec.o /opt/qt5/qtbase/config.tests/common/verifyspec/verifyspec.cpp > CC -o verifyspec verifyspec.o -L/usr/sfw/lib > gmake: CC: No such file or directory > gmake: *** [Makefile:64: verifyspec] Error 127 /opt/qt5/qt5-build $
So it looks like we're back to this "no CC" business. I thought I had fixed that with the following change to qtbase/mkspecs/mkspec.conf:
#QMAKE_CXX = CC QMAKE_CXX = /usr/gcc/10/bin/g++
Technically this was more of an end-run than a fix. I still don't know where CC is being set. So there must be another instance somewhere I can't find.
-
Silly question but did you check your environment variables ?
Note that you seem to set only QMAKE_CXX, did you also set the other one ?
-
Yes, I also said this in qtbase/mkspecs/mkspec.conf
#QMAKE_COMPILER = sun_cc QMAKE_COMPILER = gcc
Env vars are:
/opt/qt5/qt5-build $ echo $CC /usr/gcc/10/bin/gcc /opt/qt5/qt5-build $ echo $CXX /usr/gcc/10/bin/g++ /opt/qt5/qt5-build $ which gcc /usr/gcc/10/bin/gcc /opt/qt5/qt5-build $ gcc --version gcc (GCC) 10.2.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. /opt/qt5/qt5-build $ g++ --version g++ (GCC) 10.2.0 Copyright (C) 2020 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. /opt/qt5/qt5-build $ which gcc
Do I need anything else there?
-
What about the QMAKE_CC variable ?
-
That's set too:
# QMAKE_COMPILER = sun_cc QMAKE_COMPILER = gcc QMAKE_CC = gcc
-
I just realized, did you try to specific the platform in your configure options ?
-
Uh, I guess not. What file would that be?
-
Based on the mkspecs available, I would try the solaris-g++ or solaris-g++-64.
-
DING!! Give that man a ceegar! Thank you so much.
...(bunch of stuff) ... Qt WebEngine: Proprietary Codecs ..................... no Spellchecker ........................... yes ALSA ................................... no PulseAudio ............................. no Note: No wayland-egl support detected. Cross-toolkit compatibility disabled. **Qt is now configured for building.** Just run 'gmake'. Once everything is built, you must run 'gmake install'. Qt will be installed into Prior to reconfiguration, make sure you remove any leftovers from the previous build. /opt/qt5/qt5-build $
For the record, this is the command that worked:
/opt/qt5/qt5-build $ ../configure -developer-build -opensource -nomake examples -nomake tests -platform solaris-g++
I'm so happy I'm just going to let it go for now and wait til tomorrow to try the gmake :-)
I am wondering about that "remove any leftovers" comment. Is that anything in particular?
-
Well gmake ran for a long time but finally gave up. This is the tail of the tale:
../../../../include/QtGui/../../../../qtbase/src/gui/painting/qtransform.h:57:20: note: ‘class QTransform’ declared here 57 | class Q_GUI_EXPORT QTransform | ^~~~~~~~~~ ../../../../include/QtGui/../../../../qtbase/src/gui/painting/qtransform.h: In copy constructor ‘QTransform::QTransform(const QTransform&)’: ../../../../include/QtGui/../../../../qtbase/src/gui/painting/qtransform.h:88:46: warning: ‘void* std::memcpy(void*, const void*, std::size_t)’ writing to an object of type ‘class QTransform’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead []8;;https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wclass-memaccess-Wclass-memaccess]8;;] 88 | { memcpy(this, &other, sizeof(QTransform)); } | ^ ../../../../include/QtGui/../../../../qtbase/src/gui/painting/qtransform.h:57:20: note: ‘class QTransform’ declared here 57 | class Q_GUI_EXPORT QTransform | ^~~~~~~~~~ In file included from /opt/qt5/qtbase/src/plugins/platforms/vnc/qvnc_p.h:43, from /opt/qt5/qtbase/src/plugins/platforms/vnc/main.cpp:42: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.h: At global scope: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.h:76:22: error: expected ‘;’ at end of member declaration 76 | bool swapBytes() const | ^~~~~ | ; gmake[5]: *** [Makefile:1665: .obj/main.o] Error 1 gmake[5]: Leaving directory '/opt/qt5/qt5-build/qtbase/src/plugins/platforms/vnc' gmake[4]: *** [Makefile:121: sub-vnc-make_first] Error 2 gmake[4]: Leaving directory '/opt/qt5/qt5-build/qtbase/src/plugins/platforms' gmake[3]: *** [Makefile:100: sub-platforms-make_first] Error 2 gmake[3]: Leaving directory '/opt/qt5/qt5-build/qtbase/src/plugins' gmake[2]: *** [Makefile:695: sub-plugins-make_first] Error 2 gmake[2]: Leaving directory '/opt/qt5/qt5-build/qtbase/src' gmake[1]: *** [Makefile:47: sub-src-make_first] Error 2 gmake[1]: Leaving directory '/opt/qt5/qt5-build/qtbase' gmake: *** [Makefile:89: module-qtbase-make_first] Error 2 /opt/qt5/qt5-build $
-
So I gave qvncscreen.h the semicolon it was missing:
#if Q_BYTE_ORDER == Q_BIG_ENDIAN bool swapBytes() const ; #endif
and tried again. Now we get:
g++ -c -g -Wall -W -D_REENTRANT -fPIC -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_PLUGIN -DQT_GUI_LIB -DQT_DBUS_LIB -DQT_CORE_LIB -I/opt/qt5/qtbase/src/plugins/platforminputcontexts/ibus -I. -I../../../../include/QtGui/5.8.0 -I../../../../include/QtGui/5.8.0/QtGui -I../../../../include -I../../../../include/QtGui -I../../../../include/QtDBus -I../../../../include/QtCore/5.8.0 -I../../../../include/QtCore/5.8.0/QtCore -I../../../../include/QtCore -I.moc -I/opt/csw/include -I/usr/openwin/include -I/usr/sfw/include -I/opt/qt5/qtbase/mkspecs/solaris-g++ -o .obj/qibusproxy.o /opt/qt5/qtbase/src/plugins/platforminputcontexts/ibus/qibusproxy.cpp /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp: In member function ‘void QVncClient::convertPixels(char*, const char*, int) const’: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp:145:17: error: ‘swapBytes’ was not declared in this scope; did you mean ‘m_swapBytes’? 145 | if (swapBytes) | ^~~~~~~~~ | m_swapBytes
-
Just add the missing ; and go on with your build.
I don't know why it's not there both the dev and latest 5.15 branch have it.
-
Just add the missing ; and go on with your build.
I don't know why it's not there both the dev and latest 5.15 branch have it.
@SGaist OK, I changed swapBytes to m_swapBytes (which is how it appears everywhere else) and that went away. Now:
88 | { memcpy(this, &other, sizeof(QTransform)); } | ^ ../../../../include/QtGui/../../../../qtbase/src/gui/painting/qtransform.h:57:20: note: ‘class QTransform’ declared here 57 | class Q_GUI_EXPORT QTransform | ^~~~~~~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp: In member function ‘void QVncClient::setPixelFormat()’: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp:487:23: error: ‘qvnc_screen’ was not declared in this scope 487 | m_swapBytes = qvnc_screen->swapBytes(); | ^~~~~~~~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp: In member function ‘bool QVncClient::pixelConversionNeeded() const’: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncclient.cpp:642:9: error: ‘qvnc_screen’ was not declared in this scope 642 | if (qvnc_screen->swapBytes()) | ^~~~~~~~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp: At global scope: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp:175:6: error: ‘QVNCScreen’ has not been declared 175 | bool QVNCScreen::swapBytes() const | ^~~~~~~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp:175:30: error: non-member function ‘bool swapBytes()’ cannot have cv-qualifier 175 | bool QVNCScreen::swapBytes() const | ^~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp: In function ‘bool swapBytes()’: /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp:177:9: error: ‘depth’ was not declared in this scope 177 | if (depth() != 16) | ^~~~~ /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp:180:9: error: ‘screen’ was not declared in this scope; did you mean ‘qGreen’? 180 | if (screen()) | ^~~~~~ | qGreen /opt/qt5/qtbase/src/plugins/platforms/vnc/qvncscreen.cpp:182:12: error: ‘frameBufferLittleEndian’ was not declared in this scope 182 | return frameBufferLittleEndian(); | ^~~~~~~~~~~~~~~~~~~~~~~ gmake[5]: *** [Makefile:2889: .obj/qvncclient.o] Error 1 gmake[5]: *** Waiting for unfinished jobs....