FLTK не работает с заголовками Страуструпа - PullRequest
2 голосов
/ 31 декабря 2011

В настоящее время я изучаю c ++ с книгой «Программирование: принципы и практика использования C ++» из 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

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

Ответы [ 3 ]

2 голосов
/ 31 декабря 2011

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

1 голос
/ 03 февраля 2012

Я получил программу 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

0 голосов
/ 31 июля 2013

Используя пример программы из исходного кода, найденного в 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, glut, формы и т. Д.) Для пакетов, которые вы используете.

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

Вы также можете использовать переключатель --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 нужно учиться меньше, это не для слабонервных.Учебные пособия Эрко (Грег Эрколано) являются отличным примером кода для решения многих распространенных задач.http://seriss.com/people/erco/fltk/

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

Существует ряд других удачных поисков: Учебное пособие по FLTK

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

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

...