Windows MinGW-w64编译安装FLTK 1.3.5

简介

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(不知道以后会不会出问题)。无奈这个库实在太小众,资料十分不全面,官方文档关于安装也语焉不详,很多东西要自己摸索。

FLTK Demo运行图

废话了这么多,下面进入主题。

众所周知(不知道也没关系),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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容

  • 废话 生命在于折腾。 之前不用这个插件的原因: 因为要使这个插件起作用,前前后后需要下载几百MB(win下更是超过...
    饶曉文阅读 1,524评论 0 3
  • 1. Light GBM 简介 在数据挖掘和传统机器学习领域,提起大名鼎鼎的 XGBoost,相信很多人都听说过,...
    Guang777阅读 13,801评论 8 8
  • Qt是属于一个跨平台的GUI开发软件,支持的平台有Unix、Linux、Windows/WinCE、IOS等。 Q...
    一叶之界阅读 8,162评论 0 17
  • 今天中午去兰州牛肉拉面馆吃面。 周末车间不用加班,所以公司的食堂不开火,三个人就只能到外面去吃点东西。这家拉面馆虽...
    骑驴书生阅读 561评论 1 51
  • 《论语》说:“三人行必有我师,择其善者而从之,其不善者而改之” 先说三,三在中国文化里是一个泛指,是很多...
    十年一井阅读 308评论 2 3