Windows基于Mingw编译安装FLTK

news2025/2/5 10:51:20

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、FLTK是什么?
  • 二、下载源代码
  • 三、准备编译环境
  • 四、导入项目到Clion
  • 五、修改Cmake配置
    • 1.src/CMakeLists.txt
    • 2.Cmake/options.cmake
    • 3.CMakeLists.txt
  • 六、编译
  • 七、运行测试程序
  • 八、Demo
  • 总结


前言

最近在研究FLTK,突然对它感了兴趣,就想使用Clion跑一些项目,结果基于FLTK源代码编译在Windows11上各种报错。我仔细研究了下ide描述,基本可以确定主要基于VS的配置,MingW官方只是轻描淡写了下,实际编译还是报错。经过一下午不断摸索,终于跑起来了Demo,现在分享给需要的各位。

CPU:I5 13600KF
OS:Windows11 64bits


一、FLTK是什么?

FLTK (Fast Light Tool Kit 发音为full tick) 是一种使用C++开发的GUI工具包,它可以应用于Unix,Linux,MS-Windows95/98/NT/2000/XP/Vista/7/10/11和MacOS操作系统平台,相 对于其它的许多图形接口开发工具包(如MFC、GTK、QT等),它具有体积很小、速度比较快,且有着更好的移植性。

研究它纯粹是因为移植性还可以,而本身又属于比较轻量化的图形库,如果像开发炫酷的GUI,推荐还是QT5QT6,这都是后话了。

二、下载源代码

我反正是没找到bin,只找到源代码。
官网下载页面

如果你跟我一样是Windows11,建议你下载1.3.9以后的版本,兼容性会更好,不保证之前的版本可以运行在Windows11上。

在这里插入图片描述

三、准备编译环境

我使用的是Clion-2023.3.1版本,理论上Clion版本都行,但一定要使用MingW(Clion自带)。

四、导入项目到Clion

为什么导入到Clion,因为本身FLTK就有configureCmakeLists.txt两个文件,支持两种编译方式。只是configure这种在Linux上使用比较方便,Windows上几乎不行(我没研究透)。所以,今天就基于Cmake构建

五、修改Cmake配置

源代码里和配置里处处可以看到MSVC的字眼,所以如果想在MingW上编译成功,就必须改些东西,否则链接阶段会报错。

主要更改3个文件,src/CMakeLists.txtCmake/options.cmakeCMakeLists.txt

1.src/CMakeLists.txt

原配置是基于MSVC设置的,要想支持MingW就需要更改区分。
原文:

 if (OPTION_USE_SYSTEM_LIBJPEG)
    target_link_libraries (fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
  else()
    target_link_libraries (fltk_images_SHARED fltk_jpeg_SHARED)
  endif (OPTION_USE_SYSTEM_LIBJPEG)

  if (OPTION_USE_SYSTEM_LIBPNG)
    target_link_libraries (fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
  else()
    target_link_libraries (fltk_images_SHARED fltk_png_SHARED)
  endif (OPTION_USE_SYSTEM_LIBPNG)

  if (OPTION_USE_SYSTEM_ZLIB)
    target_link_libraries (fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
  else()
    target_link_libraries (fltk_images_SHARED fltk_z_SHARED)
  endif (OPTION_USE_SYSTEM_ZLIB)

改为:

  if (OPTION_USE_SYSTEM_LIBJPEG)
    target_link_libraries (fltk_images_SHARED ${FLTK_JPEG_LIBRARIES})
  else()
    if (MSVC)
      target_link_libraries (fltk_images_SHARED fltk_jpeg_SHARED)
    else ()
      target_link_libraries (fltk_images_SHARED fltk_jpeg)
    endif ()
  endif (OPTION_USE_SYSTEM_LIBJPEG)

  if (OPTION_USE_SYSTEM_LIBPNG)
    target_link_libraries (fltk_images_SHARED ${FLTK_PNG_LIBRARIES})
  else()
    if (MSVC)
      target_link_libraries (fltk_images_SHARED fltk_png_SHARED)
    else ()
      target_link_libraries (fltk_images_SHARED fltk_png)
    endif ()
  endif (OPTION_USE_SYSTEM_LIBPNG)

  if (OPTION_USE_SYSTEM_ZLIB)
    target_link_libraries (fltk_images_SHARED ${FLTK_ZLIB_LIBRARIES})
  else()
    if (MSVC)
      target_link_libraries (fltk_images_SHARED fltk_z_SHARED)
    else ()
      target_link_libraries (fltk_images_SHARED fltk_z)
    endif ()
  endif (OPTION_USE_SYSTEM_ZLIB)

2.Cmake/options.cmake

改动配置文件,增加编译动态库

#原文
option (OPTION_BUILD_SHARED_LIBS
  "Build shared libraries (in addition to static libraries)"
  OFF
)

#改为
option (OPTION_BUILD_SHARED_LIBS
  "Build shared libraries (in addition to static libraries)"
  ON
)

3.CMakeLists.txt

这个是主目录下的文件,上面的是src目录下的文件,不要改错了。主要是更改安装目录,默认C盘是需要管理员权限的,一定要执行target install,因为target install会把bin、lib、include和配置一起集中起来,要不然你还得自己挨个找,如果漏掉了还会导致各种引用报错,所以不如install来的划算。

在这里插入图片描述

set(CMAKE_INSTALL_PREFIX "./install")

六、编译

这里我居然内存溢出了,看了下Clion默认是-j 10,怪不得,我才16G的内存。如果你内存很大就没关系,我是改为了-j 6

一切都准备好就执行build,等待完成,然后install。到cmake-build-debug或cmake-build-release里面的install文件夹下找你需要的所有东西。

在这里插入图片描述

七、运行测试程序

自带了一个测试程序fluid.exe,双击即可运行。成功后大概是长这样。
在这里插入图片描述

八、Demo

怎么会没有测试代码呢,要不然别人认为我忽悠呢。

CmakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(fltk_demo)

set(CMAKE_CXX_STANDARD 11)
include_directories(include)
include_directories(include/FL)
include_directories(include/FL/images)

link_directories(lib)

add_executable(fltk_demo main.cpp)
target_link_libraries(${PROJECT_NAME} fltk_jpeg)
target_link_libraries(${PROJECT_NAME} fltk_png)
target_link_libraries(${PROJECT_NAME} fltk_z)
target_link_libraries(${PROJECT_NAME} fltk_forms)
target_link_libraries(${PROJECT_NAME} fltk_images)
target_link_libraries(${PROJECT_NAME} fltk_gl)
target_link_libraries(${PROJECT_NAME} fltk)

main.cpp

#include <iostream>
#include <Fl.H>
#include <Fl_Window.H>
#include <Fl_Box.H>


int main(int argc, char **argv) {
    auto *window = new Fl_Window(340, 180);
    auto *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();
}

其它
在这里插入图片描述
运行结果大概是下面这样
在这里插入图片描述


总结

1、没想象中那么难,一开始以为要上VS大法了,结果虚惊一场。
2、Linux上会简单很多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1337078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Isaac Sim 仿真机器人urdf文件导入

本教程展示如何在 Omniverse Isaac Sim 中导入 urdf 一. 使用内置插件导入urdf 安装urdf 插件 方法是转到“window”->“Extensions” 搜索框中输入urdf, 并启用 通过转至Isaac Utils -> Workflows -> URDF Importer菜单来访问 urdf 扩展。 表格中的 1,2,3 对应着…

【六】【C语言\动态规划】买卖股票的最佳时机含手续费、买卖股票的最佳时机 III、买卖股票的最佳时机 IV,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…

毕设之-消息系统设计(websocket+netty)

文章目录 前言技术选型基本架构 前言 long time no see。 前几天去一家小公司待了待&#xff0c;果断还是选择跑路&#xff0c;第三天就去另一家公司考察环境&#xff0c;和主管聊了两个多小时&#xff0c;非常愉快&#xff0c;就是单位薪资砍了一半。哎&#xff0c;旧事莫提了…

正定矩阵与半正定矩阵 、奇异矩阵

一、正定矩阵与半正定矩阵 请问谁能用易于理解的语言解释下矩阵的正定及半正定&#xff1f; - 知乎 M为一个方阵 定义&#xff1a; 一个非零向量X&#xff0c;如果,那么我们就规定这个M方阵为正定矩阵 单位矩阵是正定矩阵 (positive definite) 同理&#xff1a; 那么这个M…

【Java进阶篇】Java中的枚举的概念、有什么特点和好处

✔️Java枚举的概念、特点和好处 ✔️枚举的概念✔️枚举的特点✔️枚举的好处✔️拓展知识仓✔️枚举如何实现的&#xff1f; ✔️枚举的概念 Java枚举是一种特殊的数据类型&#xff0c;它的每一个值都映射到Enum类的构造函数中&#xff0c;具有固定数量的常量值。枚举类型具有…

台球杆,预计到2026年将达到 6.234 亿美元

台球杆市场多年来一直在稳步增长&#xff0c;这得益于台球作为一种全球娱乐活动的日益普及。2021 年全球台球杆市场价值 5.477 亿美元&#xff0c;预计到 2026 年将达到 6.234 亿美元&#xff0c;预测期内复合年增长率为 2.6%。 就中国市场而言&#xff0c;中国是全球最大的台球…

鹅目标检测数据集VOC格式350张

鹅是一种大型的水禽&#xff0c;常见于湖泊、河流和农田周围。它们的体形庞大&#xff0c;长有长颈和宽阔的翅膀&#xff0c;通常呈灰白色或棕褐色。鹅的头部呈黑色&#xff0c;嘴呈橙色&#xff0c;眼睛则是明亮的蓝色。 鹅是非常社交的动物&#xff0c;常以大群的形式生活在…

YOLOv5改进 | 主干篇 | ShuffleNetV1轻量化网络助力FPS提高(附代码+修改教程)

一、本文内容 本文给大家带来的改进内容是ShuffleNetV1&#xff0c;这是一种为移动设备设计的高效CNN架构。它通过使用点群卷积和通道混洗等操作&#xff0c;减少了计算成本&#xff0c;同时保持了准确性&#xff0c;通过这些技术&#xff0c;ShuffleNet在降低计算复杂度的同时…

C/S医院检验LIS系统源码

一、检验科LIS系统概述&#xff1a; LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化&#xff0c;检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后&#xff0c;自动生成打印报告&#xff0c;通过网络存储在数据库中&#xff…

Modbus TCP转Profinet协议网关应用

YC-TCP-PN通讯网关&#xff1a;引领工业通讯新篇章 在工业4.0的浪潮下&#xff0c;高效、稳定的通讯技术成为各行业的核心竞争力。作为行业领军者&#xff0c;我们自豪地推出YC-TCP-PN通讯网关&#xff0c;以其卓越性能打破行业技术壁垒&#xff0c;引领工业通讯进入新篇章。 …

使用 Python 和 PyQt 实现路由算法模拟器

项目地址 GitHub - 944613709/Shortest-Path-Simulation: 网络拓扑图最短路径模拟 引言 在现代网络技术中&#xff0c;路由算法扮演着至关重要的角色。它们决定了数据包在网络中的传输路径&#xff0c;从而影响整个网络的效率和性能。为了更好地理解这些算法的工作原理&…

UG模型的显示与隐藏

在UG中&#xff0c;除了通过图层的方式控制模型的显示与隐藏外&#xff0c;还可以直接通过显示与隐藏命令&#xff0c;位置在菜单-编辑-显示与隐藏&#xff0c;需要注意的是这些命令只能对可视图层中的模型进行控制 显示与隐藏&#xff1a;ctrl w 可以通过模型的类别&#xf…

2014年第三届数学建模国际赛小美赛B题全地形伪装解题全过程文档及程序

2014年第三届数学建模国际赛小美赛 B题 全地形伪装 原题再现&#xff1a; 破坏性着色在军事用途中很常见&#xff0c;用于军用车辆、士兵制服和装备。视觉是人类的主要方向感&#xff0c;伪装的主要功能是欺骗人眼。军事服装中存在大量的伪装图案&#xff0c;以适应作战服装与…

概率论中的 50 个具有挑战性的问题 [第 6 部分]:Chuck-a-Luck

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

审视AI Agent:追捧、落地,和2024年的To B破局点

“十个AI应用里面&#xff0c;五个办公Agent&#xff0c;三个AIGC&#xff0c;还有两成是回春的数字人。”那么&#xff0c;Agent到底是不是大模型的AGI终局产品&#xff1f; 作者|斗斗 编辑|皮爷 出品|产业家 今年4月份&#xff0c;斯坦福和谷歌的研究者共同创建了一个…

账号和权限管理

大家无论安装完linux系统和windows系统后&#xff0c;都会要求你去新建一个用户去登录&#xff0c;不会让你们直接使用超级管理员身份去登录自己的系统&#xff0c;这样是为了安全性的考虑。 一、用户账号和组账号概述 1、用户账号类型&#xff1a; linux用户账号类型&#x…

基于openGauss5.0.0全密态数据库等值查询小案例

基于openGauss5.0.0全密态数据库等值查询小案例 一、全密态数据库简介二、环境说明三、测试步骤四、使用约束 一、全密态数据库简介 价值体现&#xff1a; 密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传…

跟着LearnOpenGL学习10--基础光照

文章目录 一、前言二、环境光照三、漫反射光照3.1、法向量3.2、计算漫反射光照3.3、全部代码3.4、法线矩阵 四、镜面光照4.1、全部代码 一、前言 现实世界的光照是极其复杂的&#xff0c;而且会受到诸多因素的影响&#xff0c;这是我们有限的计算能力所无法模拟的。 因此Open…

企业微信自建应用获取用户信息

一.前言 开发企业微信自建应用的时候难免会有获取企微个人信息的业务需求,这篇博客将详细说明企微自建应用获取userId的具体流程. 二.基本概念介绍 2.1 corpid 每个企业都拥有唯一的corpid&#xff0c;获取此信息可在管理后台“我的企业”&#xff0d;“企业信息”下查看“企业…