Для всех, кто находится в таком же затруднительном положении, я оставляю здесь то, что сделал, чтобы, наконец, иметь возможность скомпилировать и получить окно первой программы с FLTK в разделе 12.3 книги Страуструпа «Программирование: принципы и практика с использованием C ++, 2-е издание».
После установки FLTK на Kubuntu 14.04 с
$ 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
Iпришлось добавить -lfltk_images и -std = c ++ 11
Однако теперь мне пришлось иметь дело с ошибками, которые дал мне компилятор.Чтобы получить работающую программу, мне пришлось сделать несколько изменений в источниках, которые Страуструп дал на http://www.stroustrup.com/Programming/PPP2code/
- Я оставил комментарий std_lib_facilities.h на Graph.h
- Чтобы устранить неоднозначностьокна, мне нужно было указать Graph_lib :: Window в строке 9 Simple_window.h
- std_lib_facilities.h в строках 107 и 113 использует сравнение ai <0, когда я не подписан (но это всего лишь предупреждения). </li>
- Строка 159 Graph.h использует fl_color (), но компилятор говорит, что это должен быть Fl_Color
- Мне нужно раскомментировать конструкторы для Point в Point.h
- Существует несколько переопределенийв Simple_window.cpp из Simple_window.h В Simple_window.cpp я закомментировал определения для конструктора, cb_next и wait_for_button (что не совпадает с определением для Simple_window.h).На Simple_window.h я прокомментировал определения wait_for_button и далее.Кстати, wait_for_button не работает ни в одной из форм.
- В GUI.cpp есть другое переопределение для конструктора Menu.Я закомментировал это.
- Я изменил последнюю строку примера раздела 12.3 из win.wait_for_button;чтобы Fl :: бежать ();который я взял из примера в Приложении D, потому что в противном случае окно не закрывается с помощью кнопки закрытия.
Со всеми этими изменениями у меня наконец-то есть окно, как и должно быть, и окно закрывается либос помощью кнопки Next или кнопки закрытия указанного окна (с помощью wait_for_button мне нужно было завершить программу из Konsole с помощью Ctrl-c после того, как я пытался закрыть ее с помощью кнопки закрытия окна).
Надеюсьследующий человек не должен тратить все время, которое мне пришлось потратить.
Редактировать: Что ж, проверив свою систему и команду компиляции, я понял, что повторяются несколько ковров ..и что они на самом деле не существуют в моей системе 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
Это чертовски легко (я почти могу писать их каждый раз, когда они мне нужны)