qt之库编译错误:qdbusmarshaller.cpp:(.text+0x0): `QDBusMarshaller::append(QString const&)'被多次定义

错误描述

.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::append(QString const&)’中:
qdbusmarshaller.cpp:(.text+0x0): `QDBusMarshaller::append(QString const&)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x1b90):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::open(QDBusMarshaller&, int, char const*)’中:
qdbusmarshaller.cpp:(.text+0xc0): `QDBusMarshaller::open(QDBusMarshaller&, int, char const*)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x1c80):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::beginCommon(int, char const*)’中:
qdbusmarshaller.cpp:(.text+0x180): `QDBusMarshaller::beginCommon(int, char const*)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x1d40):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::endCommon()’中:
qdbusmarshaller.cpp:(.text+0x220): `QDBusMarshaller::endCommon()'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x2380):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::close()’中:
qdbusmarshaller.cpp:(.text+0x230): `QDBusMarshaller::close()'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x2390):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::~QDBusMarshaller()’中:
qdbusmarshaller.cpp:(.text+0x280): `QDBusMarshaller::~QDBusMarshaller()'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x23e0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::~QDBusMarshaller()’中:
qdbusmarshaller.cpp:(.text+0x280): `QDBusMarshaller::~QDBusMarshaller()'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x23e0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::~QDBusMarshaller()’中:
qdbusmarshaller.cpp:(.text+0x2d0): `QDBusMarshaller::~QDBusMarshaller()'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x2450):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::error(QString const&)’中:
qdbusmarshaller.cpp:(.text+0x2f0): `QDBusMarshaller::error(QString const&)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x25c0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::appendRegisteredType(QVariant const&)’中:
qdbusmarshaller.cpp:(.text+0x320): `QDBusMarshaller::appendRegisteredType(QVariant const&)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x25f0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller*)’中:
qdbusmarshaller.cpp:(.text+0x3a0): `QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller*)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x2d40):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::appendVariantInternal(QVariant const&)’中:
qdbusmarshaller.cpp:(.text+0x6d0): `QDBusMarshaller::appendVariantInternal(QVariant const&)'被多次定义
.obj/qdbusargument.o:qdbusargument.cpp:(.text+0x3cb0):第一次在此定义
.obj/qdbusmarshaller.o:在函数‘QDBusMarshaller::appendCrossMarshalling(QDBusDemarshaller*)’中:
qdbusmarshaller.cpp:(.text+0x5ec):对‘QDBusDemarshaller::currentSignature()’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:253: recipe for target '../../lib/libQt5DBus.so.5.14.1' failed
make[3]: *** [../../lib/libQt5DBus.so.5.14.1] Error 1
make[3]: Leaving directory '/home/jaron/software/qt-build/qtbase/src/dbus'
Makefile:351: recipe for target 'sub-dbus-make_first' failed
make[2]: *** [sub-dbus-make_first] Error 2
make[2]: Leaving directory '/home/jaron/software/qt-build/qtbase/src'
Makefile:50: recipe for target 'sub-src-make_first' failed
make[1]: *** [sub-src-make_first] Error 2
make[1]: Leaving directory '/home/jaron/software/qt-build/qtbase'
Makefile:87: recipe for target 'module-qtbase-make_first' failed
make: *** [module-qtbase-make_first] Error 2

错误原因

        这是由于在源码文件qtbase/src/dbus/qdbusargument.cpp中有以下代码:

// for optimization purposes, we include the marshallers here
#include "qdbusmarshaller.cpp"
#include "qdbusdemarshaller.cpp"

        这是已经包含了qdbusmarshaller.cpp。但是在工程文件qtbase/src/dbus/dbus.pro中同时又包含以下代码:

SOURCES += qdbusconnection.cpp \
    qdbusconnectioninterface.cpp \
    qdbuserror.cpp \
    qdbusintegrator.cpp \
    qdbusmessage.cpp \
    qdbusserver.cpp \
    qdbusabstractinterface.cpp \
    qdbusinterface.cpp \
    qdbusxmlparser.cpp \
    qdbusutil.cpp \
    qdbusintrospection.cpp \
    qdbusabstractadaptor.cpp \
    qdbusinternalfilters.cpp \
    qdbusmetaobject.cpp \
    qdbusxmlgenerator.cpp \
    qdbusmisc.cpp \
    qdbusargument.cpp \
    qdbusreply.cpp \
    qdbusmetatype.cpp \
    qdbusextratypes.cpp \
    qdbusmarshaller.cpp \
    qdbuscontext.cpp \
    qdbuspendingcall.cpp \
    qdbuspendingreply.cpp \
    qdbus_symbols.cpp \
    qdbusservicewatcher.cpp \
    qdbusunixfiledescriptor.cpp \
    qdbusvirtualobject.cpp

        这两个地方对文件qdbusmarshaller.cpp进行了重复包含,所以造成了在编译期间检测到两个文件中有相同的符号。

解决方法

        可以删除qtbase/src/dbus/dbus.pro文件中SOURCESqdbusmarshaller.cpp的引用,例如:

SOURCES += qdbusconnection.cpp \
    qdbusconnectioninterface.cpp \
    qdbuserror.cpp \
    qdbusintegrator.cpp \
    qdbusmessage.cpp \
    qdbusserver.cpp \
    qdbusabstractinterface.cpp \
    qdbusinterface.cpp \
    qdbusxmlparser.cpp \
    qdbusutil.cpp \
    qdbusintrospection.cpp \
    qdbusabstractadaptor.cpp \
    qdbusinternalfilters.cpp \
    qdbusmetaobject.cpp \
    qdbusxmlgenerator.cpp \
    qdbusmisc.cpp \
    qdbusargument.cpp \
    qdbusreply.cpp \
    qdbusmetatype.cpp \
    qdbusextratypes.cpp \
    qdbusmarshaller.cpp \				/* 手动删除本行 */
    qdbuscontext.cpp \
    qdbuspendingcall.cpp \
    qdbuspendingreply.cpp \
    qdbus_symbols.cpp \
    qdbusservicewatcher.cpp \
    qdbusunixfiledescriptor.cpp \
    qdbusvirtualobject.cpp

load(qt_module)
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值