[Qt-interest] Building Qt with clang

Philipp Münzel mailing-lists at philippmuenzel.de
Sun Sep 11 14:34:32 CEST 2011


Another update from clang:

I managed to build Qt/master with the following patch:

--- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h
+++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
@@ -215,7 +215,7 @@ inline QString qt_mac_NSStringToQString(const NSString *nsstr)
 { return QCFString::toQString(reinterpret_cast<const CFStringRef>(nsstr)); }
 
 inline NSString *qt_mac_QStringToNSString(const QString &qstr)
-{ return [reinterpret_cast<const NSString *>(QCFString::toCFStringRef(qstr)) autorelease]; }
+{ return [const_cast<NSString*>(reinterpret_cast<const NSString *>(QCFString::toCFStringRef(qstr))) autorelease]; }
 
 #ifdef QT_MAC_USE_COCOA
 class QCocoaPostMessageArgs {

and the following settings: 
./configure -opensource -release -no-qt3support -no-script -no-scripttools -no-declarative -no-declarative-debug -no-webkit -no-javascript-jit -no-libpng -no-libtiff -no-libjpeg -no-gif -no-openssl -no-libmng -nomake demos -nomake examples -carbon -arch x86 -platform unsupported/macx-clang -sdk /Developer/SDKs/MacOSX10.6.sdk/ -no-multimedia -no-phonon -no-phonon-backend -no-audio-backend

I disabled most of the modules because compilation stops with mysterious type mismatches of some function pointers. 

On Linux however, I got most of the modules to compile. 
Is there a chance for better clang support on OSX in the future?

Philipp


On 07.09.2011 01:11 "Philipp Münzel" <mailing-lists at philippmuenzel.de>
wrote:
> And another update:
> 
> I found this posting about the undefined ___eprintf problem:
> http://comments.gmane.org/gmane.comp.compilers.llvm.devel/40132 
> and solved it by checking out the compiler-rt into llvm/projects 
> 
> After that LLVM build fails complaining some missing headers for the
> ARM architecture.
> I solved that by reconfiguring LLVM to support only the x86
> architecture. I rebuilt llvm, clang and compiler-rt with this setting.
> 
> Now the compilation of Qt goes a lot further, until it stops in Qt Gui
> with:
> 
> In file included from kernel/qcursor_mac.mm:52:
> In file included from
> ../../include/QtGui/private/qt_cocoa_helpers_mac_p.h:1:
> ../../include/QtGui/private/../../../src/gui/kernel/qt_cocoa_helpers_m
> ac_p.h:218:10: error: 
>       cannot initialize return object of type 'NSString *' with an
> rvalue of
>       type 'const NSString *'
>   ...[reinterpret_cast<const NSString
> *>(QCFString::toCFStringRef(qstr)) autorelease]...
>     
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ~~~~~~~~~~
> /System/Library/Frameworks/Foundation.framework/Headers/NSObject.h:37:
> 1: note: 
>       instance method 'autorelease' is assumed to return an instance
> of its
>       receiver type ('const NSString *')
> - (id)autorelease NS_AUTOMATED_REFCOUNT_UNAVAILABLE;
> ^
> 1 error generated.
> make[2]: *** [.obj/release-shared/qcursor_mac.o] Error 1
> 
> 
> const-correctness bug in Qt?
> 
> Philipp
> 
> 
> On 06.09.2011 22:31 "Philipp Münzel" <mailing-lists at philippmuenzel.de>
> wrote:
> > Update:
> > I have checked out a trunk of llvm and gcc and built it.
> > Trying to built Qt (git master) results now in a linker error:
> > 
> > Undefined symbols for architecture i386:
> >   "___eprintf", referenced from:
> >       _HB_HeuristicPosition in harfbuzz-shaper-all.o
> >       _HB_HeuristicSetGlyphAttributes in harfbuzz-shaper-all.o
> >       _HB_SelectScript in harfbuzz-shaper-all.o
> >       _HB_ShapeItem in harfbuzz-shaper-all.o
> >       _HB_IndicShape in harfbuzz-shaper-all.o
> >       _HB_IndicAttributes in harfbuzz-shaper-all.o
> >       _HB_GreekShape in harfbuzz-shaper-all.o
> >       ...
> > ld: symbol(s) not found for architecture i386
> > 
> > 
> > the full command that resulted in this error is:
> > 
> > clang++ -headerpad_max_install_names -arch i386 -single_module
> > -dynamiclib -compatibility_version	4.8 -current_version	4.8.0
> > -install_name	/usr/local/Trolltech/Qt-4.8.0/lib/QtCore.framework/Ver
> > si
> > ons/4/QtCore -Xarch_i386 -mmacosx-version-min=10.4 -o QtCore
> > .obj/release-shared/qlocale_mac.o
> > .obj/release-shared/qabstractanimation.o
> > .obj/release-shared/qvariantanimation.o
> > .obj/release-shared/qpropertyanimation.o
> > .obj/release-shared/qanimationgroup.o
> > .obj/release-shared/qsequentialanimationgroup.o
> > .obj/release-shared/qparallelanimationgroup.o
> > .obj/release-shared/qpauseanimation.o .obj/release-shared/qfuture.o
> > .obj/release-shared/qfutureinterface.o
> > .obj/release-shared/qfuturesynchronizer.o
> > .obj/release-shared/qfuturewatcher.o .obj/release-shared/qrunnable.o
> > .obj/release-shared/qtconcurrentfilter.o
> > .obj/release-shared/qtconcurrentmap.o
> > .obj/release-shared/qtconcurrentresultstore.o
> > .obj/release-shared/qtconcurrentthreadengine.o
> > .obj/release-shared/qtconcurrentiteratekernel.o
> > .obj/release-shared/qtconcurrentexception.o
> > .obj/release-shared/qthreadpool.o .obj/release-shared/qglobal.o
> > .obj/release-shared/qlibraryinfo.o .obj/release-shared/qmalloc.o
> > .obj/release-shared/qnumeric.o .obj/release-shared/epocroot.o
> > .obj/release-shared/registry.o .obj/release-shared/qatomic.o
> > .obj/release-shared/qmutex.o .obj/release-shared/qreadwritelock.o
> > .obj/release-shared/qmutexpool.o .obj/release-shared/qsemaphore.o
> > .obj/release-shared/qthread.o .obj/release-shared/qthreadstorage.o
> > .obj/release-shared/qmutex_unix.o .obj/release-shared/qthread_unix.o
> > .obj/release-shared/qwaitcondition_unix.o
> > .obj/release-shared/qbitarray.o .obj/release-shared/qbytearray.o
> > .obj/release-shared/qbytearraymatcher.o
> > .obj/release-shared/qcryptographichash.o
> > .obj/release-shared/qdatetime.o .obj/release-shared/qeasingcurve.o
> > .obj/release-shared/qelapsedtimer.o .obj/release-shared/qhash.o
> > .obj/release-shared/qline.o .obj/release-shared/qlinkedlist.o
> > .obj/release-shared/qlist.o .obj/release-shared/qlocale.o
> > .obj/release-shared/qlocale_tools.o .obj/release-shared/qpoint.o
> > .obj/release-shared/qmap.o .obj/release-shared/qmargins.o
> > .obj/release-shared/qcontiguouscache.o .obj/release-shared/qrect.o
> > .obj/release-shared/qregexp.o .obj/release-shared/qshareddata.o
> > .obj/release-shared/qsharedpointer.o .obj/release-shared/qsimd.o
> > .obj/release-shared/qsize.o .obj/release-shared/qstring.o
> > .obj/release-shared/qstringbuilder.o
> > .obj/release-shared/qstringlist.o
> > .obj/release-shared/qtextboundaryfinder.o
> > .obj/release-shared/qtimeline.o .obj/release-shared/qvector.o
> > .obj/release-shared/qvsnprintf.o
> > .obj/release-shared/qelapsedtimer_mac.o
> > .obj/release-shared/harfbuzz-buffer.o
> > .obj/release-shared/harfbuzz-gdef.o
> > .obj/release-shared/harfbuzz-gsub.o
> > .obj/release-shared/harfbuzz-gpos.o
> > .obj/release-shared/harfbuzz-impl.o
> > .obj/release-shared/harfbuzz-open.o
> > .obj/release-shared/harfbuzz-stream.o
> > .obj/release-shared/harfbuzz-shaper-all.o
> > .obj/release-shared/qharfbuzz.o
> > .obj/release-shared/qabstractfileengine.o
> > .obj/release-shared/qbuffer.o .obj/release-shared/qdatastream.o
> > .obj/release-shared/qdataurl.o .obj/release-shared/qdebug.o
> > .obj/release-shared/qdir.o .obj/release-shared/qdiriterator.o
> > .obj/release-shared/qfile.o .obj/release-shared/qfileinfo.o
> > .obj/release-shared/qiodevice.o
> > .obj/release-shared/qnoncontiguousbytedevice.o
> > .obj/release-shared/qprocess.o .obj/release-shared/qtextstream.o
> > .obj/release-shared/qtemporaryfile.o .obj/release-shared/qresource.o
> > .obj/release-shared/qresource_iterator.o .obj/release-shared/qurl.o
> > .obj/release-shared/qsettings.o .obj/release-shared/qfsfileengine.o
> > .obj/release-shared/qfsfileengine_iterator.o
> > .obj/release-shared/qfilesystemwatcher.o
> > .obj/release-shared/qfilesystementry.o
> > .obj/release-shared/qfilesystemengine.o
> > .obj/release-shared/qfsfileengine_unix.o
> > .obj/release-shared/qfilesystemengine_unix.o
> > .obj/release-shared/qprocess_unix.o
> > .obj/release-shared/qfilesystemiterator_unix.o
> > .obj/release-shared/qfilesystemengine_mac.o
> > .obj/release-shared/qsettings_mac.o
> > .obj/release-shared/qfilesystemwatcher_fsevents.o
> > .obj/release-shared/qfilesystemwatcher_kqueue.o
> > .obj/release-shared/qpluginloader.o
> > .obj/release-shared/qfactoryloader.o .obj/release-shared/quuid.o
> > .obj/release-shared/qlibrary.o .obj/release-shared/qelfparser_p.o
> > .obj/release-shared/qlibrary_unix.o
> > .obj/release-shared/qabstracteventdispatcher.o
> > .obj/release-shared/qabstractitemmodel.o
> > .obj/release-shared/qbasictimer.o .obj/release-shared/qeventloop.o
> > .obj/release-shared/qcoreapplication.o
> > .obj/release-shared/qcoreevent.o .obj/release-shared/qmetaobject.o
> > .obj/release-shared/qmetatype.o .obj/release-shared/qmimedata.o
> > .obj/release-shared/qobject.o
> > .obj/release-shared/qobjectcleanuphandler.o
> > .obj/release-shared/qsignalmapper.o
> > .obj/release-shared/qsocketnotifier.o .obj/release-shared/qtimer.o
> > .obj/release-shared/qtranslator.o .obj/release-shared/qvariant.o
> > .obj/release-shared/qcoreglobaldata.o
> > .obj/release-shared/qsharedmemory.o
> > .obj/release-shared/qsystemsemaphore.o
> > .obj/release-shared/qpointer.o
> > .obj/release-shared/qmath.o .obj/release-shared/qsystemerror.o
> > .obj/release-shared/qcoreapplication_mac.o
> > .obj/release-shared/qcore_mac.o .obj/release-shared/qcore_unix.o
> > .obj/release-shared/qcrashhandler.o
> > .obj/release-shared/qsharedmemory_unix.o
> > .obj/release-shared/qsystemsemaphore_unix.o
> > .obj/release-shared/qeventdispatcher_unix.o
> > .obj/release-shared/qisciicodec.o .obj/release-shared/qlatincodec.o
> > .obj/release-shared/qsimplecodec.o .obj/release-shared/qtextcodec.o
> > .obj/release-shared/qtsciicodec.o .obj/release-shared/qutfcodec.o
> > .obj/release-shared/qtextcodecplugin.o
> > .obj/release-shared/qfontlaocodec.o
> > .obj/release-shared/qiconvcodec.o
> > .obj/release-shared/qstatemachine.o
> > .obj/release-shared/qabstractstate.o .obj/release-shared/qstate.o
> > .obj/release-shared/qfinalstate.o
> > .obj/release-shared/qhistorystate.o
> > .obj/release-shared/qabstracttransition.o
> > .obj/release-shared/qsignaltransition.o
> > .obj/release-shared/qeventtransition.o
> > .obj/release-shared/qxmlstream.o .obj/release-shared/qxmlutils.o
> > .obj/release-shared/moc_qabstractanimation_p.o
> > .obj/release-shared/moc_qfuturewatcher.o
> > .obj/release-shared/moc_qthreadpool.o
> > .obj/release-shared/moc_qnamespace.o
> > .obj/release-shared/moc_qthread.o
> > .obj/release-shared/moc_qeasingcurve.o
> > .obj/release-shared/moc_qlocale.o
> > .obj/release-shared/moc_qtimeline.o
> > .obj/release-shared/moc_qfile.o .obj/release-shared/moc_qiodevice.o
> > .obj/release-shared/moc_qnoncontiguousbytedevice_p.o
> > .obj/release-shared/moc_qtemporaryfile.o
> > .obj/release-shared/moc_qsettings.o
> > .obj/release-shared/moc_qfilesystemwatcher_p.o
> > .obj/release-shared/moc_qfilesystemwatcher_fsevents_p.o
> > .obj/release-shared/moc_qfilesystemwatcher_kqueue_p.o
> > .obj/release-shared/moc_qpluginloader.o
> > .obj/release-shared/moc_qlibrary.o
> > .obj/release-shared/moc_qfactoryloader_p.o
> > .obj/release-shared/moc_qabstracteventdispatcher.o
> > .obj/release-shared/moc_qabstractitemmodel.o
> > .obj/release-shared/moc_qeventloop.o
> > .obj/release-shared/moc_qcoreapplication.o
> > .obj/release-shared/moc_qcoreevent.o
> > .obj/release-shared/moc_qmimedata.o
> > .obj/release-shared/moc_qsocketnotifier.o
> > .obj/release-shared/moc_qtimer.o
> > .obj/release-shared/moc_qtranslator.o
> > .obj/release-shared/moc_qobjectcleanuphandler.o
> > .obj/release-shared/moc_qsharedmemory.o
> > .obj/release-shared/moc_qeventdispatcher_unix_p.o
> > .obj/release-shared/moc_qtextcodecplugin.o
> > .obj/release-shared/moc_qabstractstate.o
> > .obj/release-shared/moc_qstate.o
> > .obj/release-shared/moc_qfinalstate.o
> > .obj/release-shared/moc_qhistorystate.o
> > .obj/release-shared/moc_qabstracttransition.o
> > .obj/release-shared/moc_qsignaltransition.o
> > .obj/release-shared/moc_qeventtransition.o  
> > -L/Users/philipp/Programming/qt/lib  -lz -lm -framework
> > ApplicationServices -framework CoreFoundation 
> > Undefined symbols for architecture i386:
> >   "___eprintf", referenced from:
> >       _HB_HeuristicPosition in harfbuzz-shaper-all.o
> >       _HB_HeuristicSetGlyphAttributes in harfbuzz-shaper-all.o
> >       _HB_SelectScript in harfbuzz-shaper-all.o
> >       _HB_ShapeItem in harfbuzz-shaper-all.o
> >       _HB_IndicShape in harfbuzz-shaper-all.o
> >       _HB_IndicAttributes in harfbuzz-shaper-all.o
> >       _HB_GreekShape in harfbuzz-shaper-all.o
> >       ...
> > ld: symbol(s) not found for architecture i386
> > clang: error: linker command failed with exit code 1 (use -v to see
> > invocation)
> > make[2]: *** [../../lib/QtCore.framework/QtCore] Error 1
> > make[1]: *** [release] Error 2
> > make: *** [sub-corelib-make_default-ordered] Error 2
> > 
> > 
> > 
> > 
> > On 06.09.2011 20:51 "Philipp Münzel"
> > <mailing-lists at philippmuenzel.de>
> > wrote:
> > > Good evening,
> > > 
> > > out of curiosity I'm trying to build Qt with clang, especially
> > > since
> > > I
> > > saw in the QtCreator changelog that QtCreator now integrates with
> > > clang. I look forward to seeing the better error messages of
> > > clang.
> > > 
> > > I checked out the master branch of Qt from gitorious, and
> > > configured
> > > with configure -platform unsupported/macx-clang
> > > 
> > > My llvm-clang is the Apple build, shipped with XCode 4.1 and gives
> > > the
> > > following version info: 
> > > Apple clang version 2.1 (tags/Apple/clang-163.7.1) (based on LLVM
> > > 3.0svn)
> > > Target: x86_64-apple-darwin11.1.0
> > > Thread model: posix
> > > 
> > > When I start make however, the build fails soon with this error:
> > > 
> > > kernel/qdnd_mac.mm:628:5: error: use of undeclared identifier
> > > 'SetRect'
> > >     SetRect(&boundsRect, boundsPoint.h, boundsPoint.v,
> > >     boundsPoint.h
> > >     +
> > > ...
> > >     ^
> > > 1 error generated.
> > > 
> > > I tried with other branches of Qt, the 4.8 branch and also the
> > > specific git checkout mentioned in
> > > http://labs.qt.nokia.com/2010/10/29/compiling-qt-with-clang/ 
> > > 
> > > Is the Apple version of clang branched after or before the version
> > > in
> > > the blogpost?
> > > Should I pull a recent clang from svn and build that? Or is at a
> > > completely different problem?
> > > 
> > > Regards,
> > > Philipp
> > > _______________________________________________
> > > Qt-interest mailing list
> > > Qt-interest at qt.nokia.com
> > > http://lists.qt.nokia.com/mailman/listinfo/qt-interest
> > > 
> > _______________________________________________
> > Qt-interest mailing list
> > Qt-interest at qt.nokia.com
> > http://lists.qt.nokia.com/mailman/listinfo/qt-interest
> > 
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at qt.nokia.com
> http://lists.qt.nokia.com/mailman/listinfo/qt-interest
> 



More information about the Qt-interest-old mailing list