我一直在尝试安装这个 FLTK 库:
sudo apt-get install libfltk1.3-dev
sudo apt-get install libx11-dev
我创建了简单的main.cpp
:
#include <fltk/Window.h>
#include <fltk/Widget.h>
#include <fltk/run.h>
using namespace fltk;
int main(int argc, char **argv) {
Window *window = new Window(300, 180);
window->begin();
Widget *box = new Widget(20, 40, 260, 100, "Hello, World!");
box->box(UP_BOX);
box->labelfont(HELVETICA_BOLD_ITALIC);
box->labelsize(36);
box->labeltype(SHADOW_LABEL);
window->end();
window->show(argc, argv);
return run();
}
并尝试使用以下方法进行编译:
g++ -o win main.cpp
这次失败后,我按照 FLTK 的原始说明进行操作,如下所示
打开 shell 并安装一些软件:
sudo apt-get install g++ sudo apt-get install gdb sudo apt-get install subversion sudo apt-get install autoconf sudo apt-get install libx11-dev sudo apt-get install libglu1-mesa-dev
这两个是可选的,但强烈推荐:
sudo apt-get install libasound2-dev sudo apt-get install libxft-dev
如果你打算使用 Code::Blocks IDE,也请安装此
sudo apt-get install codeblocks
我喜欢使用 subversion 来安装最新的 FLTK-1.3.release:
svn co http://seriss.com/public/fltk/fltk/branches/branch-1.3/ fltk-1.3
要更新到最新版本,只需进入 fltk-1.3 目录并输入
svn update
FIXME:没有 FL_SYMBOL 字体(--象征-), 字体 15 (Zapf-Dingbats)
当我尝试运行此行时
svn co http://seriss.com/public/fltk/fltk/branches/branch-1.3/ fltk-1.3
我被要求输入密码,我只输入了我的 Ubuntu 用户名密码,这当然是错误的。无论如何,我可能不应该这么做
Authentication realm: <http://seriss.com:80> Subversion repository
这就是我的故事,我在这里寻求一些建议!
编辑 : 这是旧的代码,同样不起作用
#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <Fl/Fl_Windows.h>
int main()
{
Fl_Window window(200, 200, "Window title");
Fl_Box box(0,0,200,200,"Hey, I mean, Hello, World!");
window.show();
return Fl::run()
}
这是错误:
main.cpp:1:19: fatal error: FL/Fl.h: No such file or directory
#include <FL/Fl.h>
^
compilation terminated.
答案1
对于那些想找到一种方法来编写 Stroustrup 的书“编程:原则与实践”附录 D 中的这段代码的人来说,标题中有一个小错误:
#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <FL/Fl_Windows.h>
但在 Ubuntu 中(或者更确切地说:在 Linux 中),你应该非常小心处理你的案例,所以你应该
#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Windows.H>
要检查标题的确切名称,只需查看 /usr/include/FL/
要从此文件(本文中为 main.cpp)获取可执行文件,只需使用
$ fltk-config --compile main.cpp
生成可执行文件 main
$ ./main
然后会显示一个简单的窗口。
顺便说一下,我在 Kubuntu 14.04 上安装了 FLTK
$ sudo apt install fltk1.3-dev
即版本 1.3.2(足够新,满足我的需要)。
答案2
关于 gcc 构建失败:看起来您正在使用 FLTK 2.0 示例并尝试使用 FLTK 1.3 进行编译。
如果您要使用 1.3,有一个包含示例的 PDF 可以安装到/usr/share/doc/fltk1.3-doc/fltk.pdf.gz
(来自包fltk1.3-doc
)。
关于 svn 问题:您正尝试登录某人的 svn 存储库,而他们需要用户名和密码。您现在可能应该在本地系统上更改密码,因为您刚刚尝试使用该密码登录互联网上的其他系统。
编辑:现在您已经更新了代码,问题略有变化...此时的问题是包含路径、链接器标志和拼写错误。
当您在包含行上看到失败时,这是因为编译器不知道在哪里查找指定的文件(或者它不存在于您的系统中)。因此,您必须将包含路径添加到编译指令中。完成此操作后,您仍需要指定适当的链接器标志,以便包含所包含文件对象的库可供链接器使用。
您的代码中有一些拼写错误:
#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <Fl/Fl_Window.H>
int main()
{
Fl_Window window(200, 200, "Window title");
Fl_Box box(0,0,200,200,"Hey, I mean, Hello, World!");
window.show();
return Fl::run();
}
并且您需要一系列令人困惑的库和包含,假设它被命名为像snippet.cpp
这样编译它:
g++ `fltk-config --cxxflags` snippet.cpp `fltk-config --libs` -lX11 -ldl -lXext -lXinerama -lXft -lfontconfig -o snippet
关于包含路径:该fltk-config --cxxflags
命令生成一组标志以传递给您的 gcc。如果您想查看这些标志是什么,请单独运行它。
关于链接器路径:再次,fltk-config
(带--libs
)命令为链接器提供了标志。
其他链接器标志的字符串几乎完全是我的猜测。我尝试编译您的代码,看到一些未定义符号的错误输出,然后根据报告的函数名称(以及 man 命令的帮助),我能够猜出哪个库提供了该符号。