【问题标题】:gfortran compilation with -fPIC vs -frecursive使用 -fPIC 与 -frecursive 进行 gfortran 编译
【发布时间】:2014-07-05 20:51:01
【问题描述】:

我最近按照this thread 上的说明将 BLAS 和 LAPACK 编译为 SciPy 安装的先决条件。首先,我在某个时候遇到了 gfortran 错误,建议我使用 -fPIC 重新编译 LAPACK。所以我通过在 makefile.inc 中用 -fPIC 替换 -frecursive 来做到这一点(我假设这是 Makefile 为不同的编译选项读取的一些文件)并且错误消失了。

有人可以更一般地解释一下使用 -fPIC 和 -frecursive 编译的区别是什么,以及它如何帮助解决我的错误。

谢谢!

【问题讨论】:

  • 进一步搜索,我找到了答案here
  • .. 除了 -frecursive 与 -fPIC 无关 - 阅读 fort ran 编译器手册页,您很可能需要两者。

标签: scipy fortran gfortran lapack


【解决方案1】:

正如 Soren 已经评论的那样:-fPIC-frecursive 完全无关。 PIC 影响机器代码在内存中的定位方式。如果要编译库代码必须编译为可重定位的。换句话说,代码必须能够运行,而不管它在内存中的哪个位置加载。 This question 更详细地处理了这个问题。

如果可能,确实应该指定-frecursivegfortran 的旧实现,例如gfortran RedHat 5 上的 4.1.2 不支持此选项。目前我还没有看到解决方法,所以你必须删除它。 gfortran documentation 将其描述为

Allow indirect recursion by forcing all local arrays to be allocated on the stack

在您提到的线程中,对于 LAPACK 库的编译,可以删除选项 -frecursive。然后库编译。

如果没有此功能它是否可以工作还有待观察。尚未测试。

【讨论】:

    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多