0

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でコンパイルしたことは十分に肯定的であるため、少し困惑しています。明らかなシンボルが見つからないということは、通常、ソースコードが欠落していることを意味します。私はそれを引き裂き始めますか?

4

1 に答える 1

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_;
};
于 2012-09-27T13:01:58.707 に答える