在MacOS平台上使用Eclipse/Photran搭建Fortran开发环境

 

系列文章 在MacOS下搭建Fortran开发环境前言Eclipse是一款著名的跨平台开源集成开发环境(IDE)。Eclipse的本身只是一个框架平台,最初基于Java语言开发,目前通过插件已经能够支持C++、Fortran、Python、PHP等各种语言的开发工具。Photran就是一款基于Eclipse和CDT(C/C++ Development Tooling)的Fortran集成开...

系列文章

前言

Eclipse是一款著名的跨平台开源集成开发环境(IDE)。Eclipse的本身只是一个框架平台,最初基于Java语言开发,目前通过插件已经能够支持C++、Fortran、Python、PHP等各种语言的开发工具。

Photran就是一款基于Eclipse和CDT(C/C++ Development Tooling)的Fortran集成开发环境。Photran 9.1于2015年6月24日与Eclipse 4.5(Mars)一起发布。Photran支持Fortran 77-2008。Photran目前是Eclipse Parallel Tools Platform(PTP)的一个组件。

部署平台

  • macOS High Sierra 10.13.2

  • gcc version 7.2.0
  • gdb version 8.0.1

  • Java(TM) SE Runtime Environment (build 9.0.1+11)

  • Eclipse Oxygen.2 (4.7.2)
    • CDT
    • PTP

准备工作

由于Eclipse是基于Java语言开发的,首先需要确定系统中有Java运行环境。在终端中运行指令

java -version

就能够获取系统中安装的Java版本号。如果提示未安装相应环境,可以前往http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html来获取最新版本的Java运行环境。或者直接使用brew cask来进行安装:

brew cask install java

另外,如果要编译和构建Fortran应用程序,则必须在系统路径中包含make程序(如GNU Make)和Fortran编译器(如gfortran,GNU Fortran编译器)。要调试Fortran应用程序,则必须安装GNU GDB。关于GDB的详细设置将在后面讨论。

可以直接采用brew进行安装:

brew install cmake gcc gdb

安装PTP

可以直接前往Eclipse package downloads page下载Eclipse for Parallel Application Developers,这其中就包含了Photran,C/C++ Development Tools,Eclipse Parallel Tools Platform以及其他的一些插件。

接下来,为了能够在启动Eclipse时能够成功找到PATH,还需要以下操作:

  1. 在应用程序中找到Eclipse.app,右键选择显示包内容
  2. 打开Contents文件,修改Info.plist中的内容;
  3. 在其中的<dict>行和<key>CFBundleExecutable</key>行之间添加一个LSEnvironment路径。如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">

<dict>
        <key>LSEnvironment</key>
                <dict>
                        <key>PATH</key>
                        <string>/usr/local/gfortran/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
                </dict>
        <key>CFBundleExecutable</key>
                <string>eclipse</string>
...

其中<string>标签中就是添加的PATH路径。

  1. 在终端中执行以下命令:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/eclipse.app

设置gdb调试器

GDB是GNU项目中的一个程序调试工具。广泛应用在UNIX/LINUX操作系统下。

对于最新的macOS来说,操作系统的保护机制System Integrity Protection(SIP)使得GDB无法直接访问系统内核。关于SIP的详细介绍可以参见这里。在使用Homebrew完成gdb的安装之后会提示:

gdb requires special privileges to access Mach ports.
You will need to codesign the binary. For instructions, see:

  https://sourceware.org/gdb/wiki/BuildingOnDarwin

On 10.12 (Sierra) or later with SIP, you need to run this:

  echo "set startup-with-shell off" >> ~/.gdbinit

提示需要对GDB进行证书授权才能够正常使用gdb调试程序。

  1. 启动钥匙串访问(Keychain Access)应用程序,打开菜单:钥匙串访问(Keychain Access)>证书助理(Certificate Assistant)>创建证书…(Creat a Certificate…);
  2. 名称(Name)填写gdb-cert,身份类型(Identity Type)选择自签名根证书(Self Signed Root),证书类型选择代码签名(Code Signing),并勾选让我覆盖这些默认值(Let me override defaults);
  3. 接下来连续点击继续,在指定用于该证书的位置时(Specify a Location For The Certificate),选择钥匙串(Keychain)为系统(System);

如果无法将证书创建在系统钥匙串下,可以先将证书创建在登录钥匙串下,然后将其导出后再导入进系统钥匙串下。

  1. 在刚创建的证书gdb-cert上点击右键,选择显示简介(Get Info),将信任选项卡下的使用此证书时:更改为始终信任
  2. 重启电脑;
  3. 对证书进行签名。打开终端,在其中输入指令:
codesign -s gdb-cert /usr/local/bin/gdb
  1. 对于macOS 10.12(Sierra)版本以上的操作系统,还需要禁止gdb从shell中启动调试程序。可以直接通过创建.gdbinit文件来实现:
echo "set startup-with-shell off" >> ~/.gdbinit

Troubleshooting

如果在执行了以上步骤之后仍然不能够顺利运行gdb,可以考虑关闭SIP:

  1. 重启系统并按住Command+R,进入恢复模式;
  2. 在使用工具中启动终端,并执行命令csrutil disable;
  3. 关闭终端并重启系统,重新创建证书并签名。

在终端中执行csrutil status可以查看当前SIP的运行情况;重复以上步骤执行csrutil enable可以重新开启SIP。


延伸阅读