【发布时间】:2016-03-16 16:37:28
【问题描述】:
我正在尝试移植一些旧的 fortran 代码。它将使用英特尔编译器 ifort 无错误地编译,并且没有警告。 当我尝试使用 gfortran,特别是 4.3.4 和 gfortran-4.8 时,我收到函数 LNBLNK_GETPID_DTIME_ 和 ETIME_ 的未定义引用错误。 我用谷歌搜索了这个问题,似乎 LNBLNK 应该是 gfortran 的内在函数。有人知道解决这个问题的方法吗?
我想我可以编写自己的 LNBLNK 函数,因为它很简单。对于 ETIME 和 DTIME,我可以将它们注释掉,它们不是必需品,但我确实需要 GETPID。
编辑:我在一个 gfortran-4.8 命令上一起编译了 100 多个文件。我只编辑了那些将LNBLNK 提到为未定义引用的文件,并将其替换为LEN_TRIM。这解决了那些未定义的引用错误,但是如果我对所有正在编译的文件执行grep,我会看到至少有 10 个其他文件仍在使用LNBLNK,并且它成功地编译通过了这个特定的undefined reference to LNKBLNK 错误。
什么会导致这个?
这可能是 gfortran 的错误吗?
编辑#2
似乎这样的代码有效:WRITE(6,*) mystring(1:LNBLNK(mystring))
但是,任何使用LNBLNK 命令的文件(如下所示)都会导致编译器错误:
INTEGER LNBLNK
EXTERNAL LNBLNK
INTEGER POS
POS = LNBLNK( mystring )
它会导致这个特定的编译器错误
/tmp/ccsdBgxK.o: In function `whatever_':
whatever.f:(.text+0x38d): undefined reference to `lnblnk_'
【问题讨论】:
-
对于 Fortran 问题,请始终使用 fortran 来获得高度关注。
-
如果你想要解释,你应该显示你执行的命令。您还应该显示确切的错误消息。这些函数确实是 gfortran 的内在过程。但是不要使用
4.3.4,它太旧了,不能认真使用。 -
我更新了上面的信息。
标签: fortran linker-errors gfortran