使用FLTK和g ++的未定义引用

时间:2016-09-06 12:05:04

标签: c++ g++ fltk

所以我一直在尝试设置FLTK库以便与g ++一起使用。我已经安装了FLTK,我可以在其文档中编译测试示例而不会出错。我正在关注Bjarne Stroustrups编程:原理和实践,第2版,对于第12章,你需要让FLTK继续。

我有很多问题需要解决,因为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-config --cxxflags, - use-images, - ldflags和--optim选项。我在最后添加了-fexceptions,因为代码使用了异常,但是--optim flag doesen似乎喜欢它们,因为它添加了-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的头文件中声明,但我的猜测是,实际定义所在的库部件可能会丢失。但我不知道从哪里得到它。有关如何解决此问题的任何建议吗?

2 个答案:

答案 0 :(得分:1)

添加-lfltk_images。那些与图像相关的功能有自己的库。

答案 1 :(得分:0)

我解决了。显然我在某些时候丢失了-ljpeg标志,并且在恢复它时它会起作用。