在Ubuntu上开发Fortran图形界面,首先需要安装GNU Fortran编译器(gfortran),它是Fortran代码的编译工具。打开终端,依次执行以下命令:
sudo apt update # 更新软件包列表
sudo apt install gfortran # 安装gfortran
安装完成后,通过gfortran --version验证安装是否成功(会显示gfortran的版本信息)。
Fortran本身不直接支持图形界面,需通过C/C++图形库的Fortran绑定实现。常见的图形库及安装步骤如下:
GTK+是Linux下最流行的图形库之一,支持Fortran绑定。安装命令:
sudo apt install libgtk-3-dev # 安装GTK+3开发库
若需使用GTK+的Fortran绑定(简化开发),可安装libgtk-fortran-dev(部分Ubuntu版本可能未提供,需手动编译或查找第三方绑定)。
FLTK(Fast Light Toolkit)是跨平台的轻量级图形库,支持Fortran。安装命令:
sudo apt install libfltk1.3-dev # 安装FLTK开发库
sudo apt install libfltk-fortran-dev # 安装FLTK的Fortran绑定(可选,但推荐)
FLTK的安装包通常包含Fortran绑定,无需额外配置。
sudo apt install libwxgtk3.0-dev # 安装wxWidgets开发库
sudo apt install libwxgtk3.0-fortran-dev # 安装wxWidgets的Fortran绑定(可选)
sudo apt install libiup-dev # 安装IUP开发库
这些库的Fortran绑定可能需要手动编译或查找第三方源。以**GTK+**为例,创建一个简单的“Hello World”窗口程序:
program hello_gtk
use gtk ! 引入GTK+模块(需安装GTK+的Fortran绑定)
implicit none
type(GtkWindow) :: window
type(GtkButton) :: button
integer :: status
! 初始化GTK
call gtk_init()
! 创建顶层窗口
window = gtk_window_new(GTK_WINDOW_TOPLEVEL)
call gtk_window_set_title(GTK_WINDOW(window), "Fortran GTK+ GUI")
call gtk_window_set_default_size(GTK_WINDOW(window), 300, 200)
! 连接窗口关闭事件(点击关闭按钮时退出程序)
call g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), null_ptr)
! 创建按钮
button = gtk_button_new_with_label("Click Me!")
call gtk_container_add(GTK_CONTAINER(window), button)
! 显示所有控件
call gtk_widget_show_all(window)
! 进入GTK主循环(等待用户操作)
call gtk_main()
end program hello_gtk
说明:代码中use gtk语句需要GTK+的Fortran绑定支持,若未安装绑定,可使用C语言编写的GTK+程序与Fortran混合编译(见后续编译步骤)。
编译时需链接图形库,以**GTK+**为例:
gfortran -o hello_gtk hello_gtk.f90 `pkg-config --cflags --libs gtk+-3.0`
命令解释:
pkg-config --cflags gtk+-3.0:获取GTK+的头文件路径(如-I/usr/include/gtk-3.0);pkg-config --libs gtk+-3.0:获取GTK+的库文件路径(如-lgtk-3 -lgdk-3);-o hello_gtk:指定输出的可执行文件名。若使用FLTK,编译命令更简单(因FLTK的Fortran绑定已内置):
gfortran -o simple_gui simple_gui.f90 -lfltk
其中-lfltk表示链接FLTK库。
编译成功后,在终端中运行生成的可执行文件:
./hello_gtk # 运行GTK+程序
./simple_gui # 运行FLTK程序
运行后会弹出对应的图形界面窗口(如GTK+的“Hello World”窗口或FLTK的输入框+按钮窗口)。