【发布时间】:2012-09-01 06:13:06
【问题描述】:
由于 Apple 已停止使用 Xcode 分发 gfortran,我应该如何编译独立于架构的 Fortran 代码?我安装了 Mac OS X Mountain Lion (10.8) 和 XCode 4.4,并安装了 Command Line Tools 包。
Apple 的原生编译器
据我所知,Xcode C / C++ / ObjC 编译器使用GNU compiler collection 的一个分支,以llvm 作为后端;我认为后者可以为 Intel 和 PPC 架构编译和优化“通用”二进制文件。
第三方二进制 Fortran 编译器
高性能计算
我只找到了一个专门为 Mountain Lion 分发二进制版本的 gfortran 的网站:HPC 网站。但是,我没有得到这个来编译 SciPy,后来在 SciPy 的 README 中看到它是"known to generate buggy scipy binaries"。
CRAN/R
SciPy 推荐的(免费)Fortran 编译器是 CRAN's R 服务器上的编译器,但尚未针对 Mountain Lion 进行更新。他们为 Building a Universal Compiler 提供了说明和脚本,但同样,这还没有为 Mountain Lion 更新..
G95
G95 project 自 2010 年以来一直没有更新,所以我没有尝试过。有人在 Mountain Lion 上尝试过吗?
Mac 端口
我想这将是安装 gfortran 的最简单方法,但 port search gfortran 什么也没有,而且我过去对 MacPorts 没有任何兴趣(没有冒犯 MacPorts;它看起来像一个非常活跃的项目,但我已经被 Linux 包管理器宠坏了,我最喜欢的管理器是 aptitude)所以在 Mac OS X 上,我过去从源代码编译软件和库。直到现在都不是问题......
构建 Fortran 编译器
在过去的几天里,我在网上搜索了很多,找到了其他 Fortran 编译器,但我没有找到任何可以交叉编译通用二进制文件或编译 SciPy。
GCC - Gnu 编译器集合
我编译了整个 GCC collection (v4.6.3),包括 autotools、automake、libtool 和 m4 - 就像 GCC wiki 和 this blog 描述 - 但生成的编译器没有编译通用二进制文件,可能是因为 LLVM没有用作后端。
龙蛋
DragonEgg 是一个“用 LLVM 替换 GCC 的优化器和代码生成器的 gcc 插件”。这看起来很有趣,但我不知道如何使用它来编译“llvm-gfortran-4.x”。这个可以吗?
兼容性
库
Xcode 附带的编译器是(一个 fork 的?)GCC v4.2。但是 GCC 当前的发布和开发分支分别是 4.6 和 4.7 版本。显然,GNU 许可证更改或其他原因阻止了 Apple 更新到更现代的 GCC 版本。那么,如果我要构建使用 GCC 的 gfortran v4.6 制作的动态库,那么它们是否可以与 Xcode 的本机编译器编译的 C 代码链接?至少,我认为生成的 Mach-O 二进制文件需要 x86_64 和 i386 代码路径。 GCC 是否提供与 Apple 的(分支?)GCC 的向后兼容性?我知道 gfortran 有 -ff2c flag,但这是否跨版本稳定?
编译标志
我从源代码构建的 GCC Fortran 编译器不支持使用 -arch 编译标志。我在早期 OSX 版本(Snow Leopard 到 Lion)的 CFLAGS 和 FFLAGS 环境变量中都包含了标志 -arch x86_64 -arch i386。 Python 的 distutils 以及可能的其他 OSX 编译器在配置为使用 Xcode 的通用 SDK 构建应用程序或框架时,希望这些标志能够工作。
如果您想知道我使用什么编译标志,我已经上传了the script I use to pastebin,我在编译任何东西之前source,使用:source ~/.bash_devenv。
理想的 OSX Fortran 编译器
- 创建 ppc 和 intel(32 位和 64 位)通用二进制文件,使用
-arch标志指定。 - 使二进制文件与 XCode 的链接器兼容。
- 编译 SciPy,没有错误(与 numpy 的 distutils 和 f2py 兼容)。
我不怎么使用 Xcode,但与它集成肯定会让其他用户受益。甚至 Intel 仍在 having problems 将 ifort 集成到 Xcode 4.4 中,所以这不是我期望的工作..
如果您阅读了以上所有内容,那么谢谢您!您可能会说我并不反对从源代码构建自己的 Fortran 编译器,但它甚至可能吗?我错过了什么吗?一个配置标志可能吗?如果还没有这样的编译器,那为什么不呢?!
(更新:)Apple 的 GCC
Apple 在opensource.apple.com 上提供了其修补版 GCC 的源代码。这实际上包括 gfortran 的源代码,但是您知道什么 - 它不能(容易)编译。我正在编写构建脚本以使其正常工作。不幸的是,我不得不应用几个补丁,并了解"the Apple way" 构建 GNU 软件。这是我认为要走的路。有什么不应该的理由吗?如果我让它工作,我会更新答案......
【问题讨论】:
标签: scipy osx-mountain-lion gfortran xcode4.4