同じ苦境にある人のために、Stroustrup の著書「Programming: Principles and Practice using C++, 2nd Edition」のセクション 12.3 で、FLTK を使用して最初のプログラムのウィンドウを最終的にコンパイルして取得できるようにするために行ったことをここに残します。
Kubuntu 14.04にFLTKをインストールした後
$ sudo apt install libfltk1.3-dev
を使用して、付録 D のサンプル プログラムをコンパイルできます。
$ fltk-config --compile fltkTest.cpp
この投稿のおかげで、12章の最初の例でようやく軌道に乗ることができた様子がわかりました。 cwivagg と Nathan のコマンドと fltk-config で生成されたコマンドを比較すると、このコマンドで終了しました。
$ clang++ -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -g -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 -std=c++11 -o 's12_3_first' 's12_3_first.cpp' Simple_window.cpp Graph.cpp GUI.cpp Window.cpp
-lfltk_images と -std=c++11 を追加する必要がありました
しかし、今度はコンパイラーから出されたエラーに対処しなければなりませんでした。動作するプログラムを入手するには、Stroustrup がhttp://www.stroustrup.com/Programming/PPP2code/で提供したソースにいくつかの変更を加える必要がありました。
- Graph.h の std_lib_facilities.h のコメントを外しました
- Window のあいまいさを解決するには、Simple_window.h の 9 行目に Graph_lib::Window を指定する必要がありました。
- 107 行目と 113 行目の std_lib_facilities.h は、i が符号なしの場合に i<0 比較を使用します (ただし、これらは単なる警告です)。
- Graph.h の 159 行目は fl_color() を使用していますが、コンパイラはそれが Fl_Color であるべきだと言っています
- Point.h の Point のコンストラクターのコメントを解除する必要がありました。
- Simple_window.h の Simple_window.cpp にはいくつかの再定義があります。 Simple_window.cpp では、コンストラクター cb_next と wait_for_button の定義をコメントアウトしました (Simple_window.h のものとは異なります)。Simple_window.h では、wait_for_button と next の定義をコメントアウトしました。ちなみに、wait_for_button はどちらの形式でも機能しません。
- GUI.cpp には、Menu のコンストラクターの別の再定義があります。コメントアウトしました。
- セクション 12.3 の例の最後の行を win.wait_for_button; から変更しました。Fl::run(); に これは、付録 D の例から取ったものです。そうしないと、閉じるボタンでウィンドウが閉じないからです。
これらすべての変更により、最終的にウィンドウが本来あるべき状態になり、ウィンドウは次へボタンまたはウィンドウの閉じるボタンで閉じます(wait_for_buttonを使用すると、試みた後にCtrl-cでKonsoleからプログラムを終了する必要がありましたウィンドウの閉じるボタンで閉じてください)。
次の人が私がしなければならなかったすべての時間を費やす必要がないことを願っています。
編集:私のシステムとコンパイルコマンドを確認したところ、いくつかのカーペットが繰り返されていることに気付きました...そしてそれらは実際には私のKubuntuシステムには存在しません。したがって、ウィンドウを機能させるために最終的に何をするかを回答に書き留める必要があります。
オブジェクトファイルを取得するには:
$ clang++ -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -g -std=c++11 -c Simple_window.cpp
私たちが欲しかった最初のプログラムを手に入れるために
% clang++ -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 -g -std=c++11 Simple_window.o Graph.o GUI.o Window.o -o z3 s12_3_first.cpp
これらは非常に簡単です(必要なときにいつでも書くことができます)