Ошибка подтверждения Xerces-c - PullRequest
1 голос
/ 05 мая 2011

Я скачал и собрал Xerces-c на Linux:

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)

Кто-нибудь имеет подобный опыт / успешно построил и использовал эту библиотеку ... как? Это становится настоящей болью и, очевидно, это единственная вещь для linux, которая правильно проверяет XML-документ по нескольким схемам с поддержкой пространства имен (или это так?)

1 Ответ

2 голосов
/ 05 мая 2011

Похоже, что вы забыли вызвать XMLPlatformUtils :: Initialize перед использованием любой функциональности xerces.

Инициализация должна вызываться первой в любом клиентском коде.

Кроме того, не забудьте XMLPlatformUtils :: Terminate (), как только вы закончите с xerces, то есть в конце программы.

Завершающий вызов в настоящее время является необязательным, чтобы помочь тем, кто динамически загружает анализатор, очистить перед выходом или избежать ложных сообщений от детекторов утечки.

AFAIR не в состоянии инициировать xerces приводит к указанной вами ошибке.

...