Странное взаимодействие: ECL выдает ошибки в окнах, когда TGUI пытается создать поле редактирования

В настоящее время я использую TGUI (библиотека GUI на основе SFML) вместе с ECL (поэтому я могу использовать Lisp для конфигурации и скриптов). На Linux / gcc работает нормально, но на Windows / MinGW ECL выдает ошибку:

Condition of type: FLOATING-POINT-INVALID-OPERATION
#<a FLOATING-POINT-INVALID-OPERATION>
Available restarts:

1. (CONTINUE) Ignore signal

Top level in: #<process TOP-LEVEL>.
>

Точка в коде, в которой выдается ошибка (минимальный код, который ее создает):

empty_panel = tgui::Panel::Ptr(*cur_gui, "empty_panel");
empty_panel->setSize(cfg.res.x, cfg.res.y);
empty_panel->setBackgroundColor(sf::Color::Transparent);

tgui::EditBox::Ptr txt_test(*empty_panel, "txt_test");

Обратите внимание, что я могу просто создавать метки, кнопки, флажки и т. Д., Но как только я пытаюсь создать поле редактирования, ECL жалуется.
Это не имеет никакого смысла для меня вообще. TGUI и ECL — совершенно не связанные библиотеки, не разделяющие функции или зависящие друг от друга каким-либо образом, о котором я знаю. У кого-нибудь есть идеи, что может вызвать такое поведение?

РЕДАКТИРОВАТЬ: Только что выполнил полную перекомпиляцию SFML, TGUI и ECL с самой последней версией MinGW, и она все равно ломается точно так же. Поэтому я решил, что этого достаточно, и я перепишу свой проект, чтобы использовать вместо него SFGUI.
Отныне этот вопрос представляет только академический интерес.

0

Решение

Я наконец узнал, что могло произойти там:

Во время работы ECL он пытается обработать все необработанные исключения, ошибки сегмента и т. Д., Которые происходят на его часах, даже если они никогда не взаимодействуют с LISP. И способ, которым он обрабатывает их, заключается в немедленном переходе к REPL, когда они происходят, чтобы разрешить ручную отладку.

Что является нормальным делом для всего, что происходит из-за ошибок в программе LISP или функциях C / C ++, которые взаимодействуют с ним, но слегка сбивает с толку, когда ошибка происходит в несвязанном коде C ++ (как предполагаемая ошибка в TGUI).

Минимальный способ воспроизведения: загрузите ECL и попробуйте несколько недопустимых операций, например:

#include <ecl/ecl.h>
int main(int argc, char **argv) {
cl_boot(argc, argv);
atexit(cl_shutdown);
int x = 1/0;
return EXIT_SUCCESS; }
0

Другие решения


По вопросам рекламы [email protected]