【问题标题】:Building Qt Messaging Framework On Mac在 Mac 上构建 Qt 消息传递框架
【发布时间】:2012-06-19 14:47:07
【问题描述】:

我正在尝试从 OS X 10.6 上的 Git 源代码构建最新版本的 QMF,但我一直遇到此错误:

"QPrivatelyImplemented<QMailMessageBodyPrivate>::~QPrivatelyImplemented()", referenced from:
  QMailMessageBody::~QMailMessageBody()in qmfstoragemanager.o
  QMailMessageBody::~QMailMessageBody()in qmfstoragemanager.o
  PartStorer::operator()(QMailMessagePart const&)in qmfstoragemanager.o
  PartLoader::operator()(QMailMessagePart&)in qmfstoragemanager.o
 "QPrivatelyImplemented<QMailMessageHeaderFieldPrivate>::~QPrivatelyImplemented()", referenced from:
  QMailMessageContentType::~QMailMessageContentType()in qmfstoragemanager.o
  QMailMessageContentType::~QMailMessageContentType()in qmfstoragemanager.o
  ReferenceLoader::operator()(QMailMessagePart&)in qmfstoragemanager.o
  PartLoader::operator()(QMailMessagePart&)in qmfstoragemanager.o
"QPrivatelyImplemented<QMailMessagePartContainerPrivate>::~QPrivatelyImplemented()", referenced from:
  QMailMessage::~QMailMessage()in qmfstoragemanager.o
"QPrivatelyImplemented<QMailMessageMetaDataPrivate>::~QPrivatelyImplemented()", referenced from:
  QMailMessage::~QMailMessage()in qmfstoragemanager.o
 "QPrivatelyImplemented<QMailMessageMetaDataPrivate>::operator=(QPrivatelyImplemented<QMailMessageMetaDataPrivate> const&)", referenced from:
  QmfStorageManager::load(QString const&, QMailMessage*) in qmfstoragemanager.o
"QPrivatelyImplemented<QMailMessagePartContainerPrivate>::operator=(QPrivatelyImplemented<QMailMessagePartContainerPrivate> const&)", referenced from:
  QmfStorageManager::load(QString const&, QMailMessage*) in qmfstoragemanager.o
ld: symbol(s) not found for architecture x86_64

但是,它确实在 Ubuntu 下完美编译,而且我已经足够肯定我之前已经在 OS X 上编译过,所以我有点困惑,没有找到明显的符号通常意味着缺少一些源代码,任何人都来在我开始撕开它之前先把它看完?

【问题讨论】:

  • "ld: symbol(s) not found for architecture x86_64" 这对我来说看起来很可疑。您是否链接到适当的库(如果需要)? This link 也可能是相关的。
  • 这可能是我的 Qt 构建中的一些问题,但通常当您遗漏方法定义时,它会抛出相同的警告。

标签: macos qt qt-mobility


【解决方案1】:

出现此错误是因为编译器从库中省略了未引用的类。 我能够通过在 src\libraries\qmfclient\qmailinstantiations.cpp 中的所有显式模板实例化之后添加以下代码(或将其添加到文件末尾)来解决此问题:

class reference_holder
{
    struct helper
    {
        helper(QPrivatelyImplemented<QMailMessageBodyPrivate>* = 0)
        {
        }

        ~helper()
        {
        }
    };

    static helper helper_;

    static void use_helper()
    {
        (void)helper_;
    }

    template<void(*)()>
    struct helper2 {};

    static helper2<&reference_holder::use_helper> helper2_;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2011-03-21
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多