【问题标题】:GFortran doesn't know system()GFortran 不知道 system()
【发布时间】:2017-05-24 17:25:59
【问题描述】:

我正在尝试在 Fortran 中执行命令,因为我们的集群使用旧的编译器,所以我不能使用 execute_command_line。因此我正在尝试切换到系统:

    succ = system("zip -0q " // zipfile &
                             // " " // npy_name)
    if(succ /=  0) then
        write (*,*) "Can't execute zip command"
    endif

对于 IFort 我可以使用:

    USE IFPORT

而且效果很好。 GFortran 不知道这个库(因为它是 intels)所以我把它注释掉然后我得到:

~/NPY-for-Fortran/src/npy.f90:52:15:

         succ = system("rm " // npy_name)
               1
Error: Function ‘system’ at (1) has no IMPLICIT type

如何在命令行中执行命令,以便它在新旧编译器以及 Intel 和 GNU 上运行?如果你需要一个完整的工作环境,这是整个源文件:

https://github.com/MRedies/NPY-for-Fortran.git

【问题讨论】:

  • 我一直用它作为子程序,call system(..)。 FWIW。
  • @agentp -- 你可以“调用”它,也可以将它作为一个函数来返回系统命令的返回值。
  • system 不可用之前,您必须返回到 gfortran 4.1。支持一个旧的/有限的版本在我的优先级列表中并不重要。
  • 根据当前文档,它可以以任何一种方式使用,但我不知道旧编译器是否总是如此。 ifort 不需要USE IFPORT 顺便用子程序形式。
  • 如果不使用 USE IFPORT,我的 ifort 版本 17.0.4 无法编译它。

标签: fortran gfortran


【解决方案1】:

system 是 GFortran 中 GNU 扩展标准的一部分,因此您必须使用该标准(例如,而不是 std=f95)。

gfortran -std=gnu file.f90

【讨论】:

  • 这是默认的。
  • 你确定 std=f95 会删除它吗?扩展内在函数不违反标准,它们是允许的。
  • 是的,由于他没有显示他的编译器调用,我假设他的调用(或他的环境)改变了默认值。
  • 不,我不确定它是否能解决问题。这只是最明显的策略。
  • 确实解决了问题。我有 -std=f2008 现在它可以工作了。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-12-17
  • 2023-02-24
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多