【问题标题】:gfortran: default include search path?gfortran:默认包含搜索路径?
【发布时间】:2020-05-01 04:50:24
【问题描述】:

如何找到 gfortran 的包含文件的默认搜索路径?

对于gcc,过去的问答显示了这个网站: https://gcc.gnu.org/onlinedocs/gcc-4.1.1/cpp/Search-Path.html#Search-Path

但是,

  1. 我不确定它是否适用于gfortran
  2. 我认为它并不总是适用。

例如,在 Linux 服务器上,(因为没有任何其他方法)我这样做了

strace gfortran try.f90 > tmp.txt 2>&1

发现这个特定的gfortran 搜索类似目录

/opt/intel/compilers_and_libraries_2016.2.181/linux/ipp/lib/intel64/x86_64-redhat-linux/4.4.7/finclude

它确实搜索/usr/include。显然,这个特殊的gfortran 是英特尔 Fortran 编译器附带的并且是定制的。

所以,我的问题是,strace 是了解默认搜索路径的唯一方法吗? (我需要知道这一点,因为我正在远程帮助一位朋友。我无法直接访问他的机器。)

更新:我应该提到-print-search-dirs 选项。它不包括“包含”搜索路径:

gfortran -print-search-dirs | grep --color include

-print-search-dirs的输出不包括我上面的实验中strace指示的目录。

Update2:我刚刚发现 ubuntu 上的 gfortran 搜索 /usr/lib/gcc/x86_64-linux-gnu/7/finclude。我很惊讶它甚至不搜索/usr/include。到目前为止,似乎我们必须使用 -I/usr/include 而我们不需要 -L/usr/lib 。 . .有人知道这种不对称的原因吗?

更新3:下面的答案显示了如何列出包含搜索路径:

echo | gfortran -E -Wp,-v -

不幸的是,这个仅列出了预处理器的路径(用于#include),而不是用于 Fortran 语言的INCLUDE 语句。

您可以通过查看预处理器搜索的目录之一来验证这一点。例如,我在其中一个中找到了cpuid.h。所以,我比较了

include 'cpuid.h'

#include "cpuid.h"

在 Fortran 源程序中。当然,两者都会导致错误,但是错误消息清楚地表明,在前一种情况下,找不到文件,而在后一种情况下,找到包含文件并将其插入源代码中, > 导致编译错误。

顺便说一句,这个练习表明在我的 Linux 服务器上,gfortran 搜索 /usr/lib/gcc/ 。 . . /finclude 在其他目录中,而其预处理器搜索 /usr/lib/gcc/ 。 . . /include ,这是有道理的。

【问题讨论】:

  • 我根据一些旧笔记更新了我的答案。我无法验证这些路径是否始终用于INCLUDE,或者是否仅用于预处理器#include;但它可能值得一试。

标签: gfortran include-path


【解决方案1】:

对我来说

gfortran -print-search-dirs

成功了。

我的版本

gfortran --version
GNU Fortran (GCC) 5.3.0
Copyright (C) 2015 Free Software Foundation, Inc.

GNU Fortran comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of GNU Fortran
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING

我不经常使用它,也不是 FORTRAN 专家,所以希望这会有所帮助。

更新

我回顾了一些旧笔记,发现了这个咒语:

echo | gfortran -E -Wp,-v -

也许这更有用?

【讨论】:

  • 感谢您的回答!但是,我应该提到它似乎没有列出包含目录。该列表仅包括“程序”和“库”部分,不包括“包含”部分。
  • 哎呀!很抱歉,我应该更仔细地检查一下。
  • 再次感谢您!不幸的是,正如您所猜测的那样,该文件确实列出了 only 用于cpp 的路径。我将更新我的帖子以包含该信息。
  • @Ryo 老鼠!我以为这就是那个。在我的情况下(我无法显示输出)它确实显示了已在(配置脚本的参数)中编译的安装特定路径,这些路径正在搜索 INCLUDE 指令。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2011-05-16
  • 1970-01-01
  • 2011-04-26
相关资源
最近更新 更多