저는 현재 ECL과 함께 TGUI (SFML 기반 GUI 라이브러리)를 사용하고 있습니다 (따라서 구성 및 스크립트에 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은 완전히 관련이없는 라이브러리이며 기능을 공유하지 않거나 내가 아는 방식으로 서로 의존하지 않습니다. 누구든지이 동작을 일으킬 수있는 아이디어가 있습니까?
편집 : 최신 버전의 MinGW를 사용하여 SFML, TGUI 및 ECL을 완전히 재 컴파일했지만 여전히 똑같은 방식으로 중단됩니다. 그래서 충분하다고 결정했고 대신 SFGUI를 사용하도록 프로젝트를 다시 작성하겠습니다. 지금부터이 질문은 학문적 관심사 일뿐입니다.
마침내 그곳에서 무슨 일이 일어 났을 지 알게되었습니다.
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; }
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다