国产信创产业发展的如火如荼, 市场上对Linux系统软件和应用软件的需求越来越强烈, Flutter作为跨平台开发中重要的力量, 对Linux环境开发的运行和支持是至关重要的。
Flutter在Linux下运行需要一些依赖软件和工具, 怎么进行软件下载, 所以我们需要先了解Liunx常见软件包下载方式
Linux软件包安装方式
不同的Linux系统版本使用不同的软件包安装工具
- wget
相似于迅雷
,是一种跨平台下载工具,支持HTTP、HTTPS、FTP协议下载,并可使用HTTP代理,支持断点续传
less
wget [选项]... [URL]...
wget http://llvm.org/clang.zip
- RPM RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了
RedHat
的标志,但是其原始设计理念是开放式的,现在包括OpenLinux、S.u.S.E.以及Turbo Linux
等Linux的分发版本都有采用,可以算是公认的行业标准了。
diff
rpm -ivh clang.rpm
-i, --install 安装一个包
-v 显示更详细的信息
-h 打印 #,显示安装进度
- apt-get
ubuntu, deepin
下的一个软件安装方式,它是基于debain。适用于deb
包安装管理,
arduino
apt-get install clang // 安装指定的包
- yum
redhat、centos
下的软件安装方式,它是基于Linux的php
Yellow dog Updater, Modified的简称, 基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
Flutter for Linux依赖工具
Flutter在 Linux 环境运行依赖如下工具和库。
- Clang(编译链接)
- CMake + Ninja(构建项目)
- git(版本管理)
- GTK development(桌面GUI开发)
- pkg-config(链接工具)
- liblzma(依赖库)
- libstdc++(依赖库)
一键安装
arduino
sudo apt-get install clang cmake git ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
1. Clang(编译工具)
clang是LLVM编译器
工具集的一个用于编译C、C++、Objective-C的前端
。LLVM项目的目标是提供一个gcc的替代品,由苹果公司的赞助开发
官网
arduino
http://llvm.org/releases/
2. CMake
因为cmake 的功能强悍而灵活, 很多大型 C/C++ 工程纷纷转到了 cmake 环境下,cmake 在设计之初的目标就是奔着用于对程序构建过程进行管理,它会自动对工程生成相应的 makefile 和其它辅助构建信息。
使用平台无关
的 CMakeList.txt
文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Linux/Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到Write once, run everywhere
。
3. Ninja build
Ninja 是Google的一名程序员推出的注重速度的构建工具Ninja 是一个专注于速度的小型构建系统。其脚本文件后缀为 .ninja 很多大型项目(例如PyTorch)都采用了ninja作为构建系统的一部分。
ninja支持并行编译和增量编译 ninja + CMake 组合是大型跨平台项目的首选构建方案
4. git(代码管理工具)
代码管理工具,不用多介绍了,程序员必备
用于切换Flutter不同版本和分支的
5. GTK development(桌面GUI开发)
跨平台的图形用户界面(GUI)工具包, 一个功能强大、设计灵活的通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。并且,GTK也有Windows版本和Mac OS X版。
有两个主要的桌面环境(Xfce 和 GNOME)用 GTK 为用户提供完整的工作环境。
支持C/C++,PHP, Guile,Perl, Python, TOM, Ada95, Objective-C, Free Pascal, and Eiffel等语言
GTK 官网:www.gtk.orgp
6. pkg-config(链接工具)
我们在编译、链接第三方库时候,必须要指定它的头文件和库文件的位置。对于一个比较大的第三方库,头文件和库文件可能比较多的,如果我们一个个手动地写,那将是相当的麻烦的。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。主要提供了下面几个功能:
- 检查库的版本号。 如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件
- 获得编译预处理参数,如宏定义、头文件的位置
- 获得链接参数,如库及依赖的其他库的位置,文件名及其他一些链接参数
- 自动加入所依赖的其他库的设置
它的文件后缀名是pc, 比如FFMpeg提供的libavcodec.pc文件
makefile
prefix=/home/bowen/ffmpeg_build
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Name: libavcodec
Description: FFmpeg codec library
Version: 57.38.100
Requires: libswresample >= 2.0.101, libavutil >= 55.22.101
Requires.private:
Conflicts:
Libs: -L${libdir} -lavcodec -lXv -lX11 -lXext -lxcb -lXau -lXdmcp -lxcb-shm -lxcb -lXau -lXdmcp -lxcb-xfixes -lxcb-render -lxcb-shape -lxcb -lXau -lXdmcp -lxcb-shape -lxcb -lXau -lXdmcp -lX11 -lasound -L/home/bowen/ffmpeg_build/lib -lx265 -lstdc++ -lm -lrt -ldl -L/home/bowen/ffmpeg_build/lib -lx264 -lpthread -lm -ldl -lfreetype -lz -lpng12 -lass -lfontconfig -lenca -lm -lfribidi -lexpat -lfreetype -lz -lpng12 -lm -llzma -lz -pthread
Libs.private:
Cflags: -I${includedir}
pc文件中已经列出libavcodec.a的所有依赖库 所以,我唯一要做的,就是把这些pc文件的路径,写到PKG_CONFIG_PATH。 我就在/home/chenxf/.bashrc末行添加了
ruby
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/bowen/ffmpeg_build/lib/pkgconfig
export PKG_CONFIG_PATH
之后直接配置pkg-config进行链接就可以了
css
clang test.c -o test pkg-config libavcodec libavformat libavutil --cflags --libs
Flutter for Linux 配置检查
当相关工具安装好后, 运行 flutter doctor 进行检查
ruby
bowen@bowen-PC:~$ flutter doctor -v
[✓] Flutter (Channel stable, 3.19.6, on Deepin 20.9 5.18.17-amd64-desktop-community-hwe, locale zh_CN.UTF-8)
• Flutter version 3.19.6 on channel stable at /home/bowen/Desktop/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 54e66469a9 (3 周前), 2024-04-17 13:08:03 -0700
• Engine revision c4cd48e186
• Dart version 3.3.4
• DevTools version 2.31.1
[✓] Linux toolchain - develop for Linux desktop
• Deepin clang version 13.0.1-+rc3-1~exp1
• cmake version 3.22.1
• ninja version 1.10.1
• pkg-config version 0.29
[✓] Android Studio (version 2023.2)
• Android Studio at /home/bowen/Desktop/android-studio
• Flutter plugin version 79.0.1
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 17.0.9+0-17.0.9b1087.7-11185874)
[✓] Connected device (1 available)
• Linux (desktop) • linux • linux-x64 • Deepin 20.9 5.18.17-amd64-desktop-community-hwe
Android Studio和Linux toolchanin 都 ok 了
运行
设备选择Linux (desktop) 点击run, 运行Flutter for Linux demo工程
成功运行, 之后就可以愉快的开发Linux项目了