使用Homebrew和安装程序安装gfortran会冲突吗?

3

我正在跟随一个在线教程使用homebrew安装一些Python模块,其中一步是使用brew install gfortran安装gfortran。后来,我尝试使用另一个第三方安装脚本安装一些Python模块,事后我意识到脚本的一部分是下载并运行http://r.research.att.com/tools/gcc-42-5666.3-darwin11.pkg。我对gfortran不是很了解,但是查看gfortran的brew公式,似乎brew使用与att.com不同的版本。这会导致未来出现问题吗?我执行了brew uninstall gfortranbrew install gfortran,目前似乎一切都一样(我尝试重新编译之前编译过的旧代码),但我不确定att.com pkg做了什么。(我使用的操作系统是OS X 10.8.2,XCode 4.2)。

1个回答

1
这取决于其他gfortran安装程序的位置。一般来说,不会冲突。* Homebrew旨在与第三方安装兼容 - 它定义了对通用“fortran”编译器的依赖关系,而不是特定的 Homebrew公式。Homebrew位于/usr/local下,将主要安装程序放置在/usr/local/Cellar下,并在/usr/local/lib中进行适当的符号链接。安装到/usr/local的其他安装程序只会阻止Homebrew链接其自己的编译器,但将与使用fortran编译器的其他公式一起使用。(假设构建选项兼容。)
您链接的gcc-42安装程序安装到/usr而不是/usr/local。**它的二进制文件后缀为“-4.2”;也就是说,它安装了cpp-4.2g++-4.2gfortran-4.2等等。因此,a)与Homebrew gfortran没有直接冲突,b)它不会直接遮盖Homebrew安装的/usr/local/bin/gfortran

当您使用这两个gfortrans构建东西时,哪个编译器会被选中取决于构建方式,但大多数情况下会寻找普通的gfortran,因此会找到Homebrew版本,除非您明确指定使用AT&T提供的版本。您没有说明如何构建东西,但由于使用了brew,我假设是通过brew或命令行工具进行的,在这种情况下,我认为它们都可能看到Homebrew gfortran并忽略此版本。查看其构建过程的详细输出以确保。


*当然,这取决于您对“冲突”的理解。

**顺便说一句:据我所知,通过查看软件包或安装管理器没有简单的方法来确定这一点。我只是在运行安装程序之前和之后执行了find /usr,并对输出进行了diff

$ diff usr_before_any_installs.txt usr_after_att_install.txt | grep '^[<>]'
> /usr/bin/c++-4.2
> /usr/bin/cpp-4.2
> /usr/bin/g++-4.2
> /usr/bin/gcc-4.2
> /usr/bin/gfortran-4.2
> /usr/bin/i686-apple-darwin11-cpp-4.2.1
> /usr/bin/i686-apple-darwin11-g++-4.2.1
> /usr/bin/i686-apple-darwin11-gcc-4.2.1
> /usr/bin/i686-apple-darwin11-gfortran-4.2.1
> /usr/include/gcc
> /usr/include/gcc/darwin
> /usr/include/gcc/darwin/4.2
...

谢谢,安德鲁。我现在比提问时更好地理解了brew和编译器的一般情况,但你的回答仍然非常有帮助,因为我还没有弄清楚AT&T安装程序是做什么的,以及它如何与brew交互。我曾经认为它可能链接到/usr/local并覆盖brew安装,但现在我知道那不是这种情况。我想最重要的是,由于我的路径中/usr/local/usr之前,所以安装程序实际上并没有影响我使用gfortran作为编译器所做的任何事情。 - ws_e_c421
不用谢!我会在这里进行一些问题回答,以此作为学习Homebrew和OS X编译器工具链的方式。 - Andrew Janke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接