Qt 5.0.2 on 64-bit Windows 7 and moc issue
I am a Qt novice and inherited a running Qt app (Qt SDK 4.8) based on Linux and told to port in to 64-bit Windows 7 using MS VS2012. I downloaded Qt 5.0.2 and after making decent progress ran into a obstacle I can't figure out. The moc app generates a .cpp file which contains:
#error "The header file 'mhnodegui.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 63
#error "This file was generated using the moc from 4.8.2. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
The curious thing is that under Qt 5.0.2, Q_MOC_OUTPUT_REVISION is defined as 67 yet the actual moc.exe which is installed with the distribution is 63, the one from Qt 4.8.4. The end result is that I can't compile the moc generated file. I tried changing the definition of Q_MOC_OUTPUT_REVISION to 63 as an experiment to force the compilation to continue with numerous fatal compilation errors. It would appear to me that there is some inconsistency in the 5.0.2 64-bit distribution with respect to moc but, as a total novice, I am sure the problem is something I'm doing but have no idea what.
This is maybe more a tools forum thing. Maybe move this post to get better answers?! IYAM what you describe is indeed strange. Did you do a clean install and do you use the latest qt creator to go along with it? It got messed up at my station before causing strange behavior while compiling. It used the qmake of a different qtCreator etc.
I downloaded and installed Qt 5.0.2 on a PC that had never had any Qt software of any kind previously installed.
Hmm, then it might be a compile error on compiling Qt. Enter a bug report I would suggest
I downloaded the binary package and so did not compile Qt. Could that be my problem?
No, that shouldn't be the issue. The SDK's on the top of the download page should be ready without compiling the Qt sources.
Does your codebase contain moc files ? If so, delete them all and rebuild all
Problem resolved but still confused about something. Lets call the .cpp file generated by moc.exe moc_x.cpp. I didn't realize until today that the file is output in my designated 'debug' directory along with obj files etc. However, there is a copy of moc_x.cpp in the directory which contains the other source files and that file was left over from the previous engineer who had worked with Qt 4.8.4. I was looking at that old file and thinking I was looking at the latest moc output, thus my confusion. The debug/moc_x.cpp was created correctly and referenced the latest version of moc. I was further confused when the latest moc_x.cpp caused the compiler to run out of heap space and I jumped to the conclusion that something was very wrong. Turns out all I had to do was increase the amount of heap space allocated to the VS 2012 compiler (QMAKE_CXXFLAGS += /Zm2000) and the compilation continued to a successful conclusion. Thanks for the help.
Confusing indeed, It's seems unusual that you need to increase the heap space allocation. You might want to check that on the mailing list (where the developers/maintainers are).
Don't forget to remove the moc files from your sources, they really shouldn't be there.