Hello. I'm experimenting with configuring/building Qt on Linux x64 (Fedora 22). My current goal is building qtbase, then I'll move on to other modules.
However, I'm stuck with errors while building dbus support: ------------- BEGIN g++ -Wl,--no-undefined -fuse-ld=gold -Wl,--enable-new-dtags -Wl,-rpath,/mnt/Data/devel/lib/qt5/exp/lib -shared -Wl,-Bsymbolic-functions -Wl,-soname,libQt5DBus.so.5 -o libQt5DBus.so.5.5.1 .obj/qdbusconnection.o .obj/qdbusconnectioninterface.o .obj/qdbuserror.o .obj/qdbusintegrator.o .obj/qdbusmessage.o .obj/qdbusserver.o .obj/qdbusabstractinterface.o .obj/qdbusinterface.o .obj/qdbusxmlparser.o .obj/qdbusutil.o .obj/qdbusintrospection.o .obj/qdbusabstractadaptor.o .obj/qdbusinternalfilters.o .obj/qdbusmetaobject.o .obj/qdbusxmlgenerator.o .obj/qdbusmisc.o .obj/qdbusargument.o .obj/qdbusreply.o .obj/qdbusmetatype.o .obj/qdbusextratypes.o .obj/qdbusmarshaller.o .obj/qdbuscontext.o .obj/qdbuspendingcall.o .obj/qdbuspendingreply.o .obj/qdbus_symbols.o .obj/qdbusservicewatcher.o .obj/qdbusunixfiledescriptor.o .obj/qdbusvirtualobject.o .obj/moc_qdbusconnectioninterface.o .obj/moc_qdbusserver.o .obj/moc_qdbusconnection.o .obj/moc_qdbusabstractadaptor.o .obj/moc_qdbusvirtualobject.o .obj/moc_qdbusconnection_p.o .obj/moc_qdbuspendingcall_p.o -L/mnt/Data/devel/lib/icu/rls/lib -L/mnt/Data/devel/lib/zlib/rls/lib -L/mnt/Data/devel/source/qt/qt5_exp/qtbase/lib -lQt5Core -lpthread /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::append(QString const&)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::open(QDBusMarshaller&, int, char const*)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::beginCommon(int, char const*)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::close()' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::~QDBusMarshaller()' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::~QDBusMarshaller()' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::endCommon()' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::error(QString const&)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::appendRegisteredType(QVariant const&)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller*)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /usr/bin/ld.gold: error: .obj/qdbusmarshaller.o: multiple definition of 'QDBusMarshaller::appendVariantInternal(QVariant const&)' /usr/bin/ld.gold: .obj/qdbusargument.o: previous definition here /mnt/Data/devel/source/qt/qt5/qtbase/src/dbus/qdbusmarshaller.cpp:571: error: undefined reference to 'QDBusDemarshaller::currentSignature()' collect2: error: ld returned 1 exit status Makefile:259: recipe for target '../../lib/libQt5DBus.so.5.5.1' failed ------------- END I'm building from the git repo, initialized with: ------------- BEGIN perl init-repository --no-webkit --module-subset=qtbase,qtmultimedia,qttools,qtxmlpatterns,qttranslations,qtdoc,qtrepotools,qtqa,qtsystems,qtfeedback,qtdocgallery,qtpim,qtconnectivity,qtwayland,qtimageformats,qtquick1,qtgraphicaleffects,qtquickcontrols,qtserialport,qtx11extras,qtwebsockets,qtwebchannel,qtwebengine,qtcanvas3d git checkout v5.5.1 ------------- END And this is my configure: ------------- BEGIN ../qt5/configure \ -prefix /mnt/Data/devel/lib/qt5/exp \ -release \ -opensource \ -confirm-license \ -c++11 \ -no-pch \ -skip qtqa \ -skip qtsystems \ -skip qtfeedback \ -skip qtdocgallery \ -skip qtpim \ -skip qtwinextras \ -skip qtmultimedia \ -skip qtxmlpatterns \ -skip qttools \ -skip qttranslations \ -skip qtdoc \ -skip qtconnectivity \ -skip qtwayland \ -skip qtimageformats \ -skip qtquick1 \ -skip qtgraphicaleffects \ -skip qtquickcontrols \ -skip qtserialport \ -skip qtwebsockets \ -skip qtwebengine \ -skip qtcanvas3d \ -skip qtx11extras \ -skip qtwebkit \ -skip qtwebkit-examples \ -skip qtwebchannel \ -skip qtsvg \ -skip qtdeclarative \ -skip qtactiveqt \ -skip qtscript \ -skip qtlocation \ -skip qtsensors \ -skip qt3d \ -skip qtmacextras \ -skip qtandroidextras \ -skip qtenginio \ -no-compile-examples \ -nomake examples \ -nomake tests \ -force-debug-info \ -shared \ -largefile \ -no-strip \ -qml-debug \ -no-warnings-are-errors \ -system-zlib \ -icu \ -qt-libpng \ -qt-libjpeg \ -qt-freetype \ -qt-harfbuzz \ -opengl \ -openssl \ -dbus \ -no-gtkstyle \ -optimized-qmake \ -reduce-relocations \ -platform linux-g++ \ -system-pcre \ -v \ -no-nis \ -no-mtdev \ -no-tslib \ -I /mnt/Data/devel/lib/icu/rls/include \ -L /mnt/Data/devel/lib/icu/rls/lib \ -I /mnt/Data/devel/lib/zlib/rls/include \ -L /mnt/Data/devel/lib/zlib/rls/lib \ -I /mnt/Data/devel/lib/openssl/rls/include ------------- END I've got two GCC builds on my system - one from the Fedora packages, and one I built myself. The error occurs with both. The g++ command for each of these files was: ------------- BEGIN g++ -c -pipe -O2 -g -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_MTDEV -DQT_NO_TSLIB -DDBUS_API_SUBJECT_TO_CHANGE -DQT_BUILD_DBUS_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_CORE_LIB -isystem /mnt/Data/devel/source/qt/qt5/qtbase/src/dbus -I. -I/mnt/Data/devel/lib/icu/rls/include -I/mnt/Data/devel/lib/zlib/rls/include -I/mnt/Data/devel/lib/openssl/rls/include -I../../include -I../../include/QtDBus -I../../include/QtDBus/5.5.1 -I../../include/QtDBus/5.5.1/QtDBus -I../../include/QtCore/5.5.1 -I../../include/QtCore/5.5.1/QtCore -I../../include/QtCore -I.moc -I/mnt/Data/devel/source/qt/qt5/qtbase/mkspecs/linux-g++ -o .obj/qdbusargument.o /mnt/Data/devel/source/qt/qt5/qtbase/src/dbus/qdbusargument.cpp g++ -c -pipe -O2 -g -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT -fPIC -DQT_NO_MTDEV -DQT_NO_TSLIB -DDBUS_API_SUBJECT_TO_CHANGE -DQT_BUILD_DBUS_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_CORE_LIB -isystem /mnt/Data/devel/source/qt/qt5/qtbase/src/dbus -I. -I/mnt/Data/devel/lib/icu/rls/include -I/mnt/Data/devel/lib/zlib/rls/include -I/mnt/Data/devel/lib/openssl/rls/include -I../../include -I../../include/QtDBus -I../../include/QtDBus/5.5.1 -I../../include/QtDBus/5.5.1/QtDBus -I../../include/QtCore/5.5.1 -I../../include/QtCore/5.5.1/QtCore -I../../include/QtCore -I.moc -I/mnt/Data/devel/source/qt/qt5/qtbase/mkspecs/linux-g++ -o .obj/qdbusmarshaller.o /mnt/Data/devel/source/qt/qt5/qtbase/src/dbus/qdbusmarshaller.cpp ------------- END Looking at the .o files, and taking QDBusMarshaller::append(QString const&) as an example, the symbol exists in both, and is a strong symbol in both. ------------- BEGIN $ nm -C ./.obj/qdbusmarshaller.o | grep -F append 0000000000000050 T QDBusMarshaller::append(QString const&) $ nm -C ./.obj/qdbusargument.o | grep -F append 0000000000001b30 T QDBusMarshaller::append(QString const&) ------------- END This, in turn, comes from here, in <source_dir>/qtbase/src/dbus/qdbusargument.cpp: ------------- BEGIN // for optimization purposes, we include the marshallers here #include "qdbusmarshaller.cpp" ------------- END So, the "multiple definition" error is to be expected. Looking at the output of g++ -E, the functions are defined in both translation units, and I can't see any mechanism to keep this error from happening (of course, this could be from lack of knowledge on my part). And yet, I didn't find hordes of people online complaining about this, so I'm assuming it's something on my system/environment that's causing the error. Any help/suggestions on where to look next will be welcome. Thanks in advance for your time. Paulo Caetano http://cidebycide.blogspot.pt/
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest