2016-09-06 3 views
2

Итак, я пытаюсь настроить библиотеку FLTK для использования с g ++. Я установил FLTK, и я могу скомпилировать тестовый пример в своей документации без ошибок. Я следую Программе Bjarne Stroustrups: принципы и практика, 2-е издание, а для 12-й главы вам нужно получить FLTK.Неопределенная ссылка с использованием FLTK с g ++

У меня было много проблем, которые необходимо было устранить, поскольку код Stroustrup обеспечивает (и что вам нужно сделать работу для его примеров), похоже, не работает с текущими версиями FLTK, и я думаю, что мне удалось для этого, но в настоящее время у меня, похоже, проблема с компоновщиком, которая, вероятно, несколько под квалифицированным предположением, связана с FLTK и тем, как я ее установил, а не с любыми ошибками в коде Stroustrup. Линия Я использую компилировать мой тестовый код (helloworld.cpp) заключается в следующем:

g++ -std=c++11 -Wextra -pedantic -I/usr/local/include -I/usr/local/include/FL/images -I/usr/include/freetype2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT Helloworld.cpp src/Graph.cpp src/GUI.cpp src/Window.cpp -L/usr/local/lib -lfltk -lXfixes -lXext -lXft -lfontconfig -lpthread -ldl -lm -lX11 -ljpeg -Os -Wall -Wunused -Wno-format-y2k -fno-exceptions -fno-strict-aliasing -ffunction-sections -fdata-sections -fexceptions -o HelloWorld 

который только с помощью FLTK-конфигурации --cxxflags, --use-изображения, - LDFLAGS и - оптимальные варианты. Я добавил -fexceptions в конце, потому что код использует исключения, но флаг -optim doesn't, похоже, им нравится, поскольку он добавляет -fno-exceptions.

Но когда я запускаю эту строку я получаю следующее сообщение об ошибке:

/tmp/ccD2Ev5l.o: In function `Graph_lib::Image::Image(Graph_lib::Point, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Graph_lib::Suffix::Encoding)': 
Graph.cpp:(.text._ZN9Graph_lib5ImageC2ENS_5PointENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6Suffix8EncodingE+0x119): undefined reference to `Fl_JPEG_Image::Fl_JPEG_Image(char const*)' 
Graph.cpp:(.text._ZN9Graph_lib5ImageC2ENS_5PointENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_6Suffix8EncodingE+0x137): undefined reference to `Fl_GIF_Image::Fl_GIF_Image(char const*)' 
collect2: error: ld returned 1 exit status 

Эти функции Fl_JPEG_Image/Fl_GIF_Image объявлены в FLTK включены headerfiles, но я думаю, что там может быть библиотека компонентов отсутствует, где фактическое определение будет находиться. Но я не знаю, где это получить. Любые предложения по устранению этого?

ответ

1

Добавить -lfltk_images. Эти функции, связанные с изображением, имеют свою собственную библиотеку.

+0

Thank you michalsrb! Это фактически позаботилось о проблеме, которую я описал выше, но результат был довольно разочаровывающим; другая проблема компоновщика скрывалась ниже той, которая была решена, и теперь я застрял с этим. – Xploit

+0

Что такое неразрешенный символ? Обратите внимание, что fltk (по крайней мере, в моей системе) состоит из 4 библиотек: fltk, fltk_forms, fltk_gl и fltk_images. Может быть, вы пропустите некоторые из них? – michalsrb

+0

Я просмотрел эти библиотеки, и все они, к счастью, включены в мою папку/usr/local/lib. Сообщение об ошибке: [code] /usr/local/lib/libfltk_images.a (Fl_JPEG_Image.o): В функции 'Fl_JPEG_Image :: Fl_JPEG_Image (char const *) ': [код] Fl_JPEG_Image.cxx :(. Text._ZN13Fl_JPEG_ImageC2EPKc + 0x9A): неопределенная ссылка на 'jpeg_std_error» [код] Fl_JPEG_Image.cxx :(text._ZN13Fl_JPEG_ImageC2EPKc + 0x14e.): неопределенная ссылка на 'jpeg_finish_decompress' и т.д. и т.п. Так что-то перепутались снова с библиотекой изображений. Вы знаете, что происходит? – Xploit

0

Я решил. По-видимому, я потерял флаг -ljpeg в какой-то момент, и после его восстановления он работает.

Смежные вопросы