Ошибка malloc во время выполнения Xalan-C на OSX 10.9 после сборки с помощью libc ++ - PullRequest
0 голосов
/ 19 сентября 2019

Мы используем библиотеки Xalan и Xerces C ++ для преобразования и синтаксического анализа XML.

Это работало безупречно до тех пор, пока наша поддержка OS X 10.8 (с libstdc ++ в качестве стандартной библиотеки).Недавно мы обновили наш проект для поддержки целевой OSX 10.9 с базовым SDK 10.12 и добавили поддержку C ++ 11, а также построили его на OSX 10.14 с XCode 9.4.

Поскольку в XCode поддержка C + 11 доступна только сlibc, нам пришлось перестроить все зависимости с C ++ 11, чтобы обеспечить совместимость ABI.Но двоичные файлы Xalan (созданные с помощью сценария runconfigure) аварийно завершают работу после восстановления с помощью флагов поддержки libc ++ и C ++ 11.

Расположение всегда - API-интерфейс Xalan Transformer :: transform ().Я попытался отладить с помощью предохранителей malloc и прошел внутри кода Xalan, но память, для которой происходит сбой, внутренне выделена в коде Xalan и не имеет отношения к входным параметрам.

Ниже приведен стек вызовов:

#0  0x00007fff879bd866 in __pthread_kill ()
#1  0x00007fff8cc3535c in pthread_kill ()
#2  0x00007fff8e63fb1a in abort ()
#3  0x00007fff91e4d690 in szone_error ()
#4  0x00007fff91e4ed95 in small_free_list_remove_ptr ()
#5  0x00007fff91e4b443 in szone_free_definite_size ()
#6  0x00000001011bd487 in xercesc_3_1::MemoryManagerImpl::deallocate(void*) ()
#7  0x0000000100d7e539 in xalanc_1_11::ArenaAllocator<xalanc_1_11::XalanDOMString, xalanc_1_11::ArenaBlock<xalanc_1_11::XalanDOMString, unsigned long> >::reset() ()
#8  0x0000000100d82062 in xalanc_1_11::XalanDOMStringPool::clear() ()
#9  0x0000000100e8088f in xalanc_1_11::StylesheetConstructionContextDefault::reset() ()
#10 0x0000000100e80329 in xalanc_1_11::StylesheetConstructionContextDefault::~StylesheetConstructionContextDefault() ()
#11 0x0000000100ed0559 in xalanc_1_11::XalanTransformer::doTransform(xalanc_1_11::XalanParsedSource const&, xalanc_1_11::XalanCompiledStylesheet const*, xalanc_1_11::XSLTInputSource const*, xalanc_1_11::XSLTResultTarget const&) ()
#12 0x0000000100ece2ad in xalanc_1_11::XalanTransformer::transform(xalanc_1_11::XSLTInputSource const&, xalanc_1_11::XSLTInputSource const&, xalanc_1_11::XSLTResultTarget const&) ()

И ошибка:

malloc: *** error for object 0x103831c08: incorrect checksum for freed object - object was probably modified after being freed.
set a breakpoint in malloc_error_break to debug

ПРИМЕЧАНИЕ. Удивительно, но код выполняется на OSX 10.14 без проблем

...