简介
FLTK(Fast Light ToolKit)是一个轻量级C++图形界面库,可以创建简单的GUI程序。C++之父Stroustrup在他的书 C++程序设计:原理与实践 中就是使用的FLTK作为界面库创建图形界面程序。相比于Qt等大型库,FLTK最大的优点就是轻量级,不需要动辄上G的安装包,打包出来的程序运行速度快、体积小。缺点一是功能不是那么丰富,没有“拖控件”这样的操作;二是对Windows系统极其不友好,能安装上简直可以烧高香。
有一种走捷径的方式,就是用微软的Visual Studio。这货体积庞大,功能丰富,使用难度也比较高。书中给的指南就是用VS的。其实VS的项目管理还是相当不错的,做大项目十分适合,缺点是打开速度慢,占用空间大,操作比较复杂。用VS编译FLTK后,以后VS建立项目时可以链接到第三方库,编译运行还是可以过的。但是想想要是以后写个HelloWorld都要开VS,设置项目第三方库,一系列乱七八糟配置,emmm遂决定不用VS。(VS那么大要是都忍了,再加个Qt又何妨?)
我自己的开发环境一直是MinGW-w64 + VS code,开发体验相当棒,不想再切换了。FLTK的官方文档给Windows系统留了两条路:一是老老实实装VS,二是装个能模拟Linux环境的,比如Cygwin和MSYS。MSYS我试了下,装完键入pacman -Syu
就卡死再也动不了了,遂弃(至今不知原因)开始折腾MinGW装库。
经历了前前后后几个月(当然不是连续的)的折腾,终于误打误撞的(划掉)、假装成功安装了FLTK(不知道以后会不会出问题)。无奈这个库实在太小众,资料十分不全面,官方文档关于安装也语焉不详,很多东西要自己摸索。
废话了这么多,下面进入主题。
众所周知(不知道也没关系),Linux下安装C++库只要素质三连:
./configure
make
make install
但是在Windows下,C++第三方库的管理是极其麻烦的,分分钟让人想骂娘。在开始之前,请确认做好以下准备:
- Windows系统,推荐Windows 10
- MinGW-w64,版本不要太老
- Git,装Git是为了使用Git自带的Git Bash。Bash的环境比起Windows的Command命令行还是好很多的(反正我在cmd下没成功过)powershell更强,
但那个我不会用 - VS code,或者其他的文本编辑器(Vim啦,Sublime啦,等等)
- FLTK 1.3.5源码,可从官网下载tar.gz格式的,可用
tar -xzv
或者7zip解压 - 想好一个放第三方库文件的位置。不建议直接放到mingw64\下面,以后万一要卸载、重新编译之类的,会很麻烦。我这里用的是C:\Users\me\src\local,其他不包含空格和中文的目录也可以,下面用%LIB_ROOT%指代这个目录。
安装
环境变量配置
最好不要修改“系统的环境变量”,而是修改“用户的环境变量”,除非你知道你在做什么。
环境变量 | 说明 |
---|---|
Path | 在原有的环境变量基础上增加以下路径:%LIB_ROOT%\bin,%MINGW%\bin,后者目录下有个g++.exe |
LIBRARY_PATH | 添加变量,路径%LIB_PATH%\lib |
C_INCLUDE_PATH | 添加变量,路径%LIB_PATH%\include |
CPLUS_INCLUDE_PATH | 添加变量,路径%LIB_PATH%\include |
后面那几个环境变量MinGW会引用,注意别把名字输错了。
你可能需要重启电脑以使环境变量的修改生效。
编译源码
把源码文件夹复制到一个不包含空格的目录下,打开文件夹,右击空白处打开git bash。然后输入:
./configure --prefix=/c/Users/me/src/local
(其实我一开始用的是./configure --prefix=C:\\Users\\me\\src\\local
,搞得后面还要用查找来改名,把名字都改成Linux格式……作死)
等待配置。多说一句,这里的配置是针对你的编译器优化的,比如VS的V
C编译器和GCC通常需要的库就不一样。配置完成后输入
mingw32-make
开始编译。这里编译完之后,你可以试试直接键入
mingw32-make install
然后看着它报错……这里我也不懂为什么。强制让它忽略错误安装:
mingw32-make install --ignore-error
一切顺利的话,你会在你的目录下看到bin, include, lib三个文件夹。其中bin是工具(等下会用到),include里面是头文件,lib里面是静态链接库。
运行第一个FLTK程序
从官方示例抄的代码:新建一个文件hello.cpp,输入以下代码
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Box.H>
int main(int argc, char **argv)
{
Fl_Window *window = new Fl_Window(340, 180);
Fl_Box *box = new Fl_Box(20, 40, 300, 100, "Hello, World!");
box->box(FL_UP_BOX);
box->labelfont(FL_BOLD + FL_ITALIC);
box->labelsize(36);
box->labeltype(FL_SHADOW_LABEL);
window->end();
window->show(argc, argv);
return Fl::run();
}
保存。且慢!你也许想用g++ hello.cpp -o hello
来编译它,如果你这样做,将会得到一串错误提示。你必须链接FLTK的库,用到g++的一些链接参数。正确的做法是:回车执行以下命令
fltk-config --compile hello.cpp
如果以上一切正常,你就能看到一开始的那个小窗口了。以上步骤对我的机器适用,不保证在所有人的机器上都适用。
关于fltk-config的更多用法,给一个官网链接:FLTK Compiling
网友评论