FLTK не работает с заголовками Stroustrup

В настоящее время я изучаю С++ с помощью книги «Программирование: принципы и практика использования С++» от Страуструпа и нахожусь в главе 12. Сейчас я несколько дней пытаюсь заставить FLTK работать с конкретными заголовками.

Я установил FLTK с MacPorts. Когда я пытаюсь скомпилировать код, включая Simple_window.h, я получаю следующие ошибки:

bash-3.2# fltk-config --compile main.cpp

/usr/bin/g++-4.2 -arch i386 -I/opt/local/include -pipe -arch i386 -arch i386 
-D_THREAD_SAFE -D_REENTRANT -o main main.cpp -arch i386 -arch i386
 /opt/local/lib/libfltk.a -lpthread -framework Carbon -framework 
ApplicationServices 

Undefined symbols:
  "vtable for Graph_lib::Window", referenced from:
      __ZTVN9Graph_lib6WindowE$non_lazy_ptr in cc1oxcSA.o
     (maybe you meant: __ZTVN9Graph_lib6WindowE$non_lazy_ptr)
  "vtable for Graph_lib::Button", referenced from:
      __ZTVN9Graph_lib6ButtonE$non_lazy_ptr in cc1oxcSA.o
 (maybe you meant: __ZTVN9Graph_lib6ButtonE$non_lazy_ptr)
  "Simple_window::Simple_window(Point, int, int, String const&)", referenced from:
  _main in cc1oxcSA.o
  "Graph_lib::Window::draw()", referenced from:
  vtable for Simple_windowin cc1oxcSA.o
  "typeinfo for Graph_lib::Window", referenced from:
  typeinfo for Simple_windowin cc1oxcSA.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Я без понятия что это значит. Я прочитал ответы здесь (ТАК). Я создал файлы .o. Я пытаюсь скомпилировать это в Mac OS с помощью fltk-config.


person MCPP    schedule 31.12.2011    source источник
comment
Вы неправильно компонуете и забываете объектные файлы? Вам нужно включить их в командной строке.   -  person pmr    schedule 31.12.2011
comment
@pmr Возможно, но я новичок, так как мне их включить?   -  person MCPP    schedule 31.12.2011


Ответы (3)


Мне кажется, что при вызове компилятора перед /opt/local/lib/libfltk.a должно стоять -l (тире). Или вы можете заменить /opt/local/lib/libfltk.a на -L/opt/local/lib -lfltk, что может быть более привычным.

person John Zwinck    schedule 31.12.2011

Я получил программу FLTK «12.3 Первый пример», работающую в Linux, используя следующие шаги:

затем распакуйте его и перейдите в папку Programming-code/GUI.

  • В этой папке добавьте #include <cstdlib> к файлу std_lib_facilities.h, чтобы избежать ошибки atoi не объявленной на следующем шаге.
  • Запустите make в командной строке в папке Programming-code/GUI. Это должно создать файл libbookgui.a.
  • Предполагая, что программа называется Example.cpp, выполните следующую команду:

    gcc `fltk-config --use-forms --use-gl --use-images --ldflags`Example.cpp libbookgui.a

  • Запустите исполняемый файл a.out

person Scott Brown    schedule 03.02.2012

Использование примера программы из исходного кода, найденного в PDF-файле FLTK-Tutorial.pdf

Мне пришлось добавить следующие строки, чтобы получить чистую компиляцию в моем Ubuntu Linux.

// 3 includes just below are not in the example but are required
// for a clean compile
#include <Fl/x.H>
#include <stdlib.h>
#include <stdio.h>

Вы должны правильно настроить строку компиляции. FLTK имеет инструмент fltk-config для помощи в настройке.

fltk-config
, чтобы получить справочное сообщение для fltk-config. Прочтите вывод, чтобы определить, что вам нужно добавить для компиляции, ссылку и любую совместимость (gl, переполнение, формы и т. д.) для пакетов, которые вы используете.

Скопируйте эту информацию в команду компиляции.

Вы также можете использовать переключатель --compile prgrname.cxx для прямой компиляции. Включите -g, потому что вам понадобится поддержка gdb.

Например:

fltk-config --cxxflags --ldflags

Дает (для меня):

-I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk

Добавьте имя вывода и программы ввода:

gcc -I/usr/include/freetype2 -g -O2 -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk mousedrawtest.cpp mousedraw.cpp -o b.out

Хотя для FLTK нужно меньше учиться, это не для слабонервных. Учебники Erco (Greg Ercolano) превосходны и представляют собой примеры кода для многих распространенных задач. http://seriss.com/people/erco/fltk/

http://www.fltk.org/documentation.php/doc-1.1/basics.html

Есть и другие хорошие поисковые запросы: Учебник по FLTK.

При переходе от простых примеров программ к реальной объектно-ориентированной модели помните о области видимости, особенно для окна верхнего уровня и его содержимого.

Сегодня, в среду, я знаю о gdb, области действия и пространстве имен гораздо больше, чем в понедельник.

person cbcalvin    schedule 31.07.2013