【问题标题】:First compilation of Fortran 90 with flang in FreeBSD 12在 FreeBSD 12 中使用 flang 首次编译 Fortran 90
【发布时间】:2020-01-09 18:46:12
【问题描述】:

我正在尝试使用 flang 在 FreeBSD 12 中编译一个“hello world”类型的程序。

这是我的源代码:

PROGRAM MAIN
  INTEGER :: X

  PRINT *, "Please, enter a number"
  READ (*, *) X
  PRINT *, "The square root of ", X, " is ", SQRT(X)
END PROGRAM MAIN

我尝试编译它没有成功:

$ flang -o test test.f90
/usr/local/bin/ld: /tmp/test-8e54ee.o: in function `MAIN_':
/usr/home/user/test/test.f90:6: undefined reference to `sqrt_'
/usr/local/bin/ld: /usr/local/flang/lib/libflangrti.so: undefined reference to `backtrace_symbols'
/usr/local/bin/ld: /usr/local/flang/lib/libflangrti.so: undefined reference to `backtrace'
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)

自从我上次使用 Fortran 以来已经有很长时间了,这绝对是我第一次尝试使用 FreeBSD 编译它。欢迎任何帮助/提示。

【问题讨论】:

  • 不要使用法兰。安装 gfortran 并快乐。
  • @evets as FreeBSD 不使用 gcc 但 clang 我认为 flang 是使用 Fortran 的自然方式。我肯定想找到一种在 FreeBSD 中使用 Fortran 的方法,如果我安装 gcc,那不会干扰 clang 吗?
  • gcc 不会干扰 clang。安装 ports/lang/gcc8 或 ports/lang/gcc9。您将获得 gfortran8 或 gfortran9。该数字是主要版本号。我的系统上有版本 6、7、8、9 和中继。一切正常。
  • @M.E. flang 是为 LLVM 制作 Fortran 编译器的早期尝试。它早就被废弃了,不应该被删除。

标签: fortran freebsd llvm-clang flang


【解决方案1】:

通过将X 声明为

,我能够解决第一个问题(“未定义对 sqrt_ 的引用”)
REAL :: X

这是有道理的,因为 Fortran 中的 SQRT 是为实数定义的(否则不清楚 KIND 返回的 REAL 结果会是什么),所以 flang 不会解析调用并期望它是对代码中其他地方定义的自定义函数的引用。

至于第二个问题(“未定义对 backtrace_symbols 的引用”),在我看来,这在安装中是一团糟。我刚刚在 VirtualBox 中安装了一个干净的 FreeBSD 12,链接器位于“/usr/bin/ld”中,这是通过 flang 查找的位置,从详细输出中可以明显看出:

$ flang -o test test.f90
(...)
 "/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 (... etc ...)

【讨论】:

  • 感谢@jacob 的回答,关于第二个问题,我不明白您是在暗示我的安装可能被搞砸了,还是FreeBSD 12 不起作用。我可以在/usr/loca/bin/ld/usr/local/x86_64-portbld-freebsd12.0/bin/ld/usr/bin/ld 中找到ld
  • 我的意思是,FreeBSD 12 的全新安装似乎在 /usr/bin/ld 之外的其他地方没有 ld。因此,您似乎安装了一些额外的东西(也许是 GNU ld?),这与系统 LLVM ld 发生冲突。
  • 看来我已经安装了gcc8,而且它似乎是py36的要求(我需要)
猜你喜欢
  • 2013-04-20
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多