因此,我一直在尝试设置FLTK库以用于g++。我已经安装了FLTK,并且可以在其文档中编译测试示例而不会出现错误。我正在关注《 Bjarne Stroustrups编程:原理和实践》第二版,在第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
。这些与图像相关的功能具有自己的库。
关于c++ - 在G++中使用FLTK的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39348645/