2012-06-19 98 views
0

我试图从OS X 10.6的Git源构建最新版本的QMF的,但我一直运行到这个错误:构建Qt消息传递框架在Mac

"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之前,所以我有点困惑,明显的符号没有发现通常意味着有一些源代码丢失,任何人都会在我开始撕裂它之前碰到这个?

+0

“ ld:找不到架构x86_64的符号“这看起来很腥。你是否与适当的库链接(如果有的话)? [这个链接](http://qt-project.org/forums/viewthread/5665)也可能是相关的。 –

+0

这可能是我编译Qt时的一些问题,但通常当你抛开一个方法定义时,它会抛出同样的警告。 –

回答

1

发生此错误是因为编译器忽略了远离库的未引用类。 我能够通过添加以下代码都明确模板实例后(或只需将其添加到文件末尾)在的src \库\ 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_; 
};