Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在FreeBSD 12中用flang首次编译Fortran 90_Fortran_Freebsd_Llvm Clang_Flang - Fatal编程技术网

在FreeBSD 12中用flang首次编译Fortran 90

在FreeBSD 12中用flang首次编译Fortran 90,fortran,freebsd,llvm-clang,flang,Fortran,Freebsd,Llvm Clang,Flang,我正在尝试用flang在FreeBSD12中编译一个“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

我正在尝试用flang在FreeBSD12中编译一个“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编译它。欢迎任何帮助/提示。

我通过将
X
声明为

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

至于第二个问题(“对回溯符号的未定义引用”),在我看来,这是安装中的一个混乱。我刚刚在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 ...)

不要用法兰。安装gfortran并感到高兴。@evets因为FreeBSD不使用gcc,但我认为flang是使用Fortran的自然方式。我正在寻找一种在FreeBSD中使用Fortran的方法,如果我安装了gcc,它不会干扰clang吗?gcc不会干扰clang。安装端口/lang/gcc8或端口/lang/gcc9。您将获得gfortran8或gfortran9。该编号是主要版本号。我的系统上有版本6、7、8、9和trunk。一切正常。@M.E.
flang
是为LLVM制作Fortran编译器的早期尝试。它很久以前就被放弃了,不应该被移除。谢谢你的回答@jacob,关于第二个问题,我不明白你是说我的安装可能会出错,还是FreeBSD 12不起作用。我可以在
/usr/loca/bin/ld
/usr/local/x86\u 64-portbld-freebsd12.0/bin/ld
/usr/bin/ld
中找到
ld
。我的意思是,FreeBSD 12的全新安装似乎在
/usr/bin/ld>之外没有
ld
。因此,您似乎安装了一些额外的东西(可能是GNU
ld
?),这与系统LLVM
ld
冲突。似乎我已经安装了gcc8,这似乎是py36的一个要求(我需要)