[Solved] Problem building Qt statically in Windows
-
Hi,
I'm trying to deploy a small project by creating an executable file that works out of the box in Windows, so I need to compile Qt sources statically. I use the following configure command:
@
configure -release -static -platform win32-g++ -nomake examples -nomake demos -no-exceptions -no-stl -no-rtti -no-qt3support -no-scripttools -no-openssl -no-opengl -no-webkit -no-phonon -no-style-motif -no-style-cde -no-style-cleanlooks -no-style-plastique -no-sql-sqlite -no-declarative -qt-sql-mysql -I C:\mysql\include -L C:\mysql\lib\opt -l mysql
@Then I run mingw32-make. After some time compiling (more than half an hour, just in case that's relevant) I get the following output:
@
[...]
g++ -c -Os -momit-leaf-frame-pointer -fno-exceptions -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQDOC2_COMPAT -DQT_NO_CAST_TO_ASCII -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NO_DYNAMIC_CAST -I"....\include\QtCore" -I"....\include\QtXml" -I"....\include" -I"c:\mysql\include" -I"....\include\QtDeclarative" -I"declarativeparser" -I"....\include\ActiveQt" -I"tmp\moc\release_static" -I"....\mkspecs\win32-g++" -o tmp\obj\release_static\cppcodemarker.o cppcodemarker.cpp
cppcodemarker.cpp: In member function 'QString CppCodeMarker::addMarkUp(const QString&, const Node*, const Location&)':
cppcodemarker.cpp:950: error: 'isalpha' was not declared in this scope
cppcodemarker.cpp:956: error: 'isalnum' was not declared in this scope
cppcodemarker.cpp:973: error: 'isdigit' was not declared in this scope
cppcodemarker.cpp:977: error: 'isalnum' was not declared in this scope
cppcodemarker.cpp: At global scope:
cppcodemarker.cpp:879: warning: 'QString untabified(const QString&)' defined but not used
mingw32-make[3]: *** [tmp/obj/release_static/cppcodemarker.o] Error 1
mingw32-make[3]: Leaving directoryC:/Users/Arturo/Desktop/Qt/tools/qdoc3' mingw32-make[2]: *** [release] Error 2 mingw32-make[2]: Leaving directory
C:/Users/Arturo/Desktop/Qt/tools/qdoc3'
mingw32-make[1]: *** [sub-qdoc3-make_default-ordered] Error 2
mingw32-make[1]: Leaving directory `C:/Users/Arturo/Desktop/Qt/tools'
mingw32-make: *** [sub-tools-make_default-ordered] Error 2
@Can anybody give me any hints about what's wrong?
Some additional info: I work in Windows 7, and I use gcc + MinGW to compile. The Qt sources are version 4.7.4, and I include the Qt MySQL plugin and the MySQL library.
-
you should restrict the static build on the libs.
Have a look at "this wiki page":http://developer.qt.nokia.com/wiki/How_to_build_a_static_Qt_version_for_Windows_with_gcc -
I found your problem description via Google. Had the same error message on Mac OS but I tried to compile to a shared library. The problem in my case was related to the -no-stl option (isAlpha) seems to be an STL function). By removing -no-stl from the configure line the problem was solved for me.
-
[quote author="Gerolf" date="1316007292"]Regard the changes, that the wiki article describe. without them, itv was not compilable, as some modules do not support static building by default.[/quote]
Yeah, I applied them, except the one related to the WebKit, which I don't use.
[quote author="hkhauke" date="1316008090"]The problem in my case was related to the -no-stl option (isAlpha) seems to be an STL function). By removing -no-stl from the configure line the problem was solved for me.
[/quote]I was a bit puzzled about that, cause I thought isAlpha was part of the standard C library, and not of STL. Maybe I got something wrong... But anyway, restricting the compilation to just the Qt libraries, as suggested by Gerolf, solved the problem for me.
Thank you all for your replies.
-
To correct
cppcodemarker.cpp:950: error: 'isalpha' was not declared in this scope
cppcodemarker.cpp:956: error: 'isalnum' was not declared in this scope
cppcodemarker.cpp:973: error: 'isdigit' was not declared in this scope
cppcodemarker.cpp:977: error: 'isalnum' was not declared in this scopeIn tools/qdoc3/cppcodemarker.cpp
just add
#include "ctype.h"
to the list of #includes at the start of the fileThis fixed it for my system