В то время как разработка БОЛЬШОГО ГЛОТКА перенесла библиотеку C++ для Ruby, мы столкнулись с необъясненным катастрофическим отказом во время обработки исключений в коде C++.
Я не, несомненно, в определенных обстоятельствах воссоздам проблему, но это произошло сначала во время вызова к std::uncaught_exception
, затем после того, как некоторый код изменяется, перемещенный в __cxa_allocate_exception
во время конструкции исключения. Ни GDB, ни valgrind не обеспечили понимания причины катастрофического отказа.
Я нашел несколько ссылок на подобные проблемы, включая:
Переопределяющая тема, кажется, комбинация обстоятельств:
"Решение" состоит в том, чтобы явно связать Вашу библиотеку с libstdc ++ и возможно также с libGL, вызвав порядок соединения.
После попытки многих комбинаций с моим кодом, единственное решение, что я нашел, что работы LD_PRELOAD="libGL.so libstdc++.so.6" ruby scriptname
опция. Таким образом, ни одно из решений для соединения времени компиляции не имело значения.
Мое понимание проблемы - то, что время выполнения C++ правильно не инициализируется. Путем принуждения порядка соединения Вы загружаете процесс инициализации, и это работает. Проблема происходит только с приложениями C, называя библиотеки C++, потому что приложение C самостоятельно не связывается с libstdc ++ и не инициализирует время выполнения C++. Поскольку с помощью БОЛЬШОГО ГЛОТКА (или повышение:: Python), распространенный способ назвать библиотеку C++ из приложения C, именно поэтому ПОТЯНИТЕ, часто подходит при исследовании проблемы.
Любой там может дать больше понимания этой проблемы? Существует ли фактическое решение, или только обходные решения существуют?
Спасибо.