如何在 ubuntu 14.04 上安装 FLTK 库

etr*_*sks 5 software-installation

我一直在尝试安装这个 FLTK 库:

sudo apt-get install libfltk1.3-dev
sudo apt-get install libx11-dev
Run Code Online (Sandbox Code Playgroud)

我创建了简单的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();
}
Run Code Online (Sandbox Code Playgroud)

并尝试使用以下方法进行编译:

g++ -o win main.cpp
Run Code Online (Sandbox Code Playgroud)

在这次失败之后,我遵循了 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    
Run Code Online (Sandbox Code Playgroud)

这两个是可选的,但强烈推荐:

sudo apt-get install libasound2-dev   
sudo apt-get install libxft-dev
Run Code Online (Sandbox Code Playgroud)

如果您打算使用 Code::Blocks IDE,也请安装它

sudo apt-get install codeblocks
Run Code Online (Sandbox Code Playgroud)

我喜欢使用 subversion 来安装最新的 FLTK-1.3.release:

svn co http://seriss.com/public/fltk/fltk/branches/branch-1.3/ fltk-1.3
Run Code Online (Sandbox Code Playgroud)

要更新到最新版本,只需进入 fltk-1.3 目录并键入

svn update
Run Code Online (Sandbox Code Playgroud)

FIXME: 没有 FL_SYMBOL 字体 (- -symbol- ),字体 15 (Zapf-Dingbats)

当我尝试运行这条线时

svn co http://seriss.com/public/fltk/fltk/branches/branch-1.3/ fltk-1.3 
Run Code Online (Sandbox Code Playgroud)

我被要求输入一些密码,我刚刚输入了我的 Ubuntu 用户名密码,这当然是不正确的。反正可能不应该这样做

Authentication realm: <http://seriss.com:80> Subversion repository
Run Code Online (Sandbox Code Playgroud)

所以这就是我的故事,在这里我寻求一些建议!

编辑: 这是旧的代码也不起作用

#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()
}
Run Code Online (Sandbox Code Playgroud)

这是错误:

main.cpp:1:19: fatal error: FL/Fl.h: No such file or directory
 #include <FL/Fl.h>
                   ^
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

小智 8

对于在 Stroustrup 的书“编程:原则和实践”,附录 D 中寻找一种方法来处理此代码的人,标题中有一个小错误:

#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <FL/Fl_Windows.h>
Run Code Online (Sandbox Code Playgroud)

但是在 Ubuntu 中(或者更好地说:在 Linux 中)你应该非常小心你的情况,所以你应该有

#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Windows.H>
Run Code Online (Sandbox Code Playgroud)

要检查标题的确切名称是什么,只需查看 /usr/include/FL/

要从此文件(在本文中为 main.cpp)中获得可执行文件,只需使用

$ fltk-config --compile main.cpp
Run Code Online (Sandbox Code Playgroud)

生成可执行的 main

$ ./main
Run Code Online (Sandbox Code Playgroud)

并会显示一个简单的窗口。

顺便说一下,在 Kubuntu 14.04 上我安装了 FLTK

$ sudo apt install fltk1.3-dev
Run Code Online (Sandbox Code Playgroud)

这是 1.3.2 版(足够​​满足我的需要)。


Ste*_*hen 3

关于 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();
}
Run Code Online (Sandbox Code Playgroud)

你需要一系列令人困惑的库和包含,假设它的名称类似于snippet.cpp编译它,如下所示:

g++ `fltk-config --cxxflags` snippet.cpp `fltk-config --libs` -lX11 -ldl -lXext -lXinerama -lXft -lfontconfig -o snippet
Run Code Online (Sandbox Code Playgroud)

关于包含路径:该fltk-config --cxxflags命令正在生成一组标志以传递给您的 gcc。如果您想查看这些标志是什么,请自行运行它。

关于链接器路径:同样,fltk-config(with --libs) 命令为链接器提供标志。

其他链接器标志字符串几乎完全是我的猜测。我尝试编译您的代码,看到一些未定义符号的错误输出,然后根据报告的函数名称(以及 man 命令的帮助)我能够猜测哪个库提供了该符号。