Мы используем библиотеки 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 без проблем