我目前正在学习使用Stroustrup编程:原理和实践使用C ++的书来学习c ++,我在第12章。我现在正在尝试使用特定标头工作的FLTK。
我已经使用MacPorts安装了FLTK。当我试图编译包括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
我不知道这意味着什么。我读了答案here (SO)。我创建了.o文件。我正在尝试使用fltk-config在Mac OS上编译它。
答案 0 :(得分:2)
在我看来,当你调用编译器时,-l
前面应该有一个/opt/local/lib/libfltk.a
(破折号)。或者您可以将/opt/local/lib/libfltk.a
替换为-L/opt/local/lib -lfltk
,这可能更为传统。
答案 1 :(得分:1)
我得到了FLTK计划' 12.3第一个例子'使用以下步骤在Linux上工作:
然后解压缩并转到Programming-code / GUI文件夹。
#include <cstdlib>
添加到文件std_lib_facilities.h中,以避免在下一步中出现未声明的错误make
。这应该创建文件libbookgui.a。假设程序名为Example.cpp,请运行以下命令:
gcc `fltk-config --use-forms --use-gl --use-images --ldflags`
Example.cpp libbookgui.a
运行a.out可执行文件
答案 2 :(得分:0)
使用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-配置强>
获取fltk-config的帮助信息。阅读输出以确定您需要为编译,链接以及您正在使用的软件包的任何兼容性(gl,过剩,表单等)添加内容。
将此信息复制到编译命令中。
您也可以使用--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,但它不适合胆小的人。 Erco(Greg Ercolano)的教程非常出色,并提供了许多常见挑战的示例代码。 http://seriss.com/people/erco/fltk/
http://www.fltk.org/documentation.php/doc-1.1/basics.html
还有很多其他好的搜索:FLTK教程
从简单的示例程序转换为真实的面向对象的模型时,请记住范围,特别是顶级窗口及其内容。
今天,星期三,我比周一更了解gdb,范围和名称空间。