如何在CentOS上使用Fortran GUI工具
导读:在 CentOS 上使用 Fortran 进行 GUI 开发的可行路径 使用支持 Fortran 的 GUI 库(如 GTK+ 的 gtk-fortran、FLTK 的 Fortran 绑定)直接编写界面。 采用混合编程:用 C/C++...
在 CentOS 上使用 Fortran 进行 GUI 开发的可行路径
- 使用支持 Fortran 的 GUI 库(如 GTK+ 的 gtk-fortran、FLTK 的 Fortran 绑定)直接编写界面。
- 采用混合编程:用 C/C++ + Qt/GTK 做 GUI,Fortran 负责计算,通过 ISO_C_BINDING 或 C 接口调用。
- 远程开发时,在本地安装 VS Code 并配合 fortls 语言服务器与远程 SSH 插件,获得接近 GUI 的开发体验。
环境准备
- 安装图形桌面(若服务器为最小化安装):
- CentOS 7:sudo yum groupinstall “X Window System” “MATE Desktop” -y & & sudo systemctl set-default graphical.target & & sudo reboot
- CentOS 8:sudo dnf groupinstall “Desktop Platform” “Fonts” -y & & sudo reboot
- 安装编译与开发工具:
- sudo yum groupinstall “Development Tools” -y
- sudo yum install gcc-gfortran -y
- 安装常用 GUI 开发库(按需选择其一或多项):
- GTK+ 2/3:sudo yum install gtk2-devel gtk3-devel -y
- Qt5:sudo yum install qt5-qtbase-devel -y
- FLTK:sudo yum install fltk-devel -y
- 可选:OpenGL 支持 sudo yum install mesa-libGL-devel -y
- 远程桌面可选:sudo yum install x11vnc -y(便于本地 VNC 客户端连接)
方案一 使用 gtk-fortran 开发 GTK 界面
- 安装 gtk-fortran(EPEL 通常提供):sudo yum install epel-release -y & & sudo yum install gtk-fortran -y
- 编译与运行要点:
- 使用 pkg-config 获取编译与链接参数:pkg-config --cflags --libs gtk±3.0
- 示例命令:gfortran hello.f90 -o hello
pkg-config --cflags --libs gtk+-3.0
- 最小示例(GTK 3,事件回调用 C 函数指针,gtk-fortran 提供 c_funloc):
- program hello_gtk use gtk implicit none type(GtkWindow) :: window type(GtkButton) :: button call gtk_init() window = gtk_window_new(GTK_WINDOW_TOPLEVEL) call gtk_window_set_title(GTK_WINDOW(window), “Hello GTK+ Fortran”) call gtk_window_set_default_size(GTK_WINDOW(window), 300, 200) button = gtk_button_new_with_label(“Click Me”) call gtk_container_add(GTK_CONTAINER(window), button) call g_signal_connect(window, "destroy"c_null_char, c_funloc(gtk_main_quit), c_null_ptr) call g_signal_connect(button, "clicked"c_null_char, c_funloc(on_button_clicked), c_null_ptr) call gtk_widget_show_all(window) call gtk_main() contains subroutine on_button_clicked(widget, data) type(GtkWidget), intent(in) :: widget call gtk_main_quit() end subroutine on_button_clicked end program hello_gtk
- 说明:
- 若使用 GTK 2,将 pkg-config 参数改为 gtk±2.0,并注意 API 差异。
- 回调需为 C 接口,gtk-fortran 提供 c_funloc/c_null_ptr 等辅助。
方案二 使用 FLTK 的 Fortran 绑定
- 安装 FLTK 与 Fortran 绑定(若仓库提供):sudo yum install fltk-devel fltk-fortran -y
- 编译与运行要点:
- 示例命令:gfortran main.f90 -o fltk_app -lfltk -lX11 -lm -lpthread
- 最小示例(FLTK 风格):
- program fltk_demo use fltk implicit none type(Fl_Window) :: win type(Fl_Button) :: btn win = Fl_Window_new(300, 200, “FLTK Fortran”) btn = Fl_Button_new(100, 70, 100, 40, “Click Me”) call Fl_Window_show(win) call Fl_Run() end program fltk_demo
- 说明:
- 若发行版仓库未提供 Fortran 绑定,可改为 C/C++ 写 GUI,Fortran 仅提供计算例程(见下一节)。
方案三 混合编程 Qt 或 GTK + Fortran 计算
- 适用场景:需要 Qt 的丰富组件 或已有 Qt/GTK C/C++ 界面框架。
- 基本思路:
- 用 C/C++ 实现 GUI(Qt Widgets/QML 或 GTK),将计算密集型函数用 ISO_C_BINDING 暴露给 C,再由 Fortran 调用或反向调用。
- 构建系统使用 CMake 管理 Fortran 与 C/C++ 混合目标,链接对应 GUI 库(Qt5Widgets、gtk-3.0 等)。
- 最小集成示例(Fortran 调用 C 函数):
- C 头文件(add.h):void add_(const int*, const int*, int*);
- C 实现(add.c):void add_(const int* a, const int* b, int* c) { *c = *a + *b; }
- Fortran 调用(main.f90):
- program main use iso_c_binding implicit none interface subroutine add_(a, b, c) bind(c, name=“add_”) import :: c_int integer(c_int), intent(in) :: a, b integer(c_int), intent(out) :: c end subroutine add_ end interface integer(c_int) :: x, y, z x = 2; y = 3 call add_(x, y, z) print *, "Fortran got: ", z end program main
- 编译:gcc -c add.c -o add.o & & gfortran -c main.f90 -o main.o & & gfortran main.o add.o -o app
远程开发与调试建议
- 远程 GUI 开发:
- 在服务器启用桌面后,使用 x11vnc 或 X2Go 远程桌面;本地用 VNC 客户端或 X2Go 客户端连接。
- IDE 与语言服务器:
- 本地安装 VS Code,通过 Remote - SSH 连接服务器;安装 fortls(pip install fortran-language-server),在 VS Code 中配置 Language Server,获得自动补全、跳转、诊断等体验。
- 调试:
- 安装 gdb:sudo yum install gdb -y;调试命令:gdb ./your_app
- 常见问题排查:
- 链接失败优先检查 pkg-config 输出是否包含正确的头文件与库路径;必要时手动补充 -I/-L/-l。
- 运行报错找不到共享库时,确认库已安装并在 /etc/ld.so.conf.d/ 配置路径后执行 ldconfig。
以上路径覆盖了在 CentOS 上用 Fortran 做 GUI 的主流做法:优先选择 gtk-fortran/FLTK 等原生绑定;若追求复杂界面与生态,采用 Qt/GTK + Fortran 混合编程 更稳妥;远程开发建议配合 VS Code + fortls 提升效率。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在CentOS上使用Fortran GUI工具
本文地址: https://pptw.com/jishu/756580.html
