1

LinuxにXerces-cをダウンロードしてビルドしました。

Linux xxxx 2.6.24.7-server-3mnb #1 SMP Wed Sep 9 16:34:18 EDT 2009 x86_64 Intel(R) Xeon(R) CPU            3065  @ 2.33GHz GNU/Linux

簡単なプログラムを作成しました:

#include <xercesc/sax2/XMLReaderFactory.hpp>
#include <xercesc/sax2/SAX2XMLReader.hpp>
#include <xercesc/sax2/DefaultHandler.hpp>
#include <xercesc/util/XMLUni.hpp>
//#include <xercesc/validators/common/Grammar.hpp>

   XERCES_CPP_NAMESPACE_USE;

int main(int argC, char *argv[])
{
    //  DefaultHandler handler;
    SAX2XMLReader *parser = XMLReaderFactory::createXMLReader();
    delete parser;
    return 0;
}

それをコンパイルしました:

g++ -lcurl -o xtest test.cpp /usr/local/lib/libxerces-c.a

コンパイルが成功し、それを実行すると、これが私が得るものです:

 ./xtest
xtest: xercesc/util/XMemory.cpp:63: static void* xercesc_3_1::XMemory::operator new(size_t, xercesc_3_1::MemoryManager*): Assertion `manager != 0' failed.
Aborted (core dumped)

誰もが同様の経験を持っている/このライブラリの構築と使用に成功しています...どうやって?それは本当に苦痛になりつつあり、名前空間をサポートする複数のスキーマに対してXMLドキュメントを適切に検証するのはLinuxにとって明らかに唯一のものです(またはそれは??)

4

1 に答える 1

3

xerces 機能を使用する前にXMLPlatformUtils::Initializeを呼び出すのを忘れたようです。

初期化は、すべてのクライアント コードで最初に呼び出す必要があります。

また、 xerces を使い終わったら、つまりプログラムの最後にXMLPlatformUtils::Terminate () を忘れないでください。

パーサーを動的にロードして終了前にクリーンアップしたり、リーク検出器からの誤ったレポートを回避したりするために、終了呼び出しは現在オプションです。

AFAIRがxercesの初期化に失敗すると、リストしたエラーが発生します。

于 2011-05-05T19:55:11.357 に答える