0

私は現在、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 は完全に無関係なライブラリであり、関数を共有したり、私が知っている方法で相互に依存したりしていません。誰かがこの動作を引き起こす可能性のある考えを持っていますか?

編集: SFML、TGUI、および ECL を最新バージョンの MinGW で完全に再コンパイルしたところ、まったく同じように壊れます。それで、もう十分だと判断したので、代わりに SFGUI を使用するようにプロジェクトを書き直します。 これからは、この質問は学術的な関心のみに限定されます。

4

1 に答える 1

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; }
于 2015-09-14T13:05:17.807 に答える