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

Undefined reference using FLTK with g++

所以我一直在尝试设置 FLTK 库以与 g++ 一起使用。我已经安装了 FLTK,我可以毫无错误地编译其文档中的测试示例。我正在关注 Bjarne Stroustrups Programming: Principles and Practice,第 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 标志似乎不喜欢它们,因为它添加了 -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 包含的头文件中声明,但我的猜测是可能缺少一个库组件,而实际定义所在的位置。但我不知道从哪里得到它。关于如何解决这个问题有什么建议吗?

添加-lfltk_images。这些图像相关的函数都有自己的库。

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