几天来,我一直在尝试编译用 fortran90 和 C 编写的某些代码。我正在使用 gfortran 和 gcc。代码需要链接到 lapack、blas 和 fftw3 库。我的 macbook pro 中安装了所有三个。但是当我运行配置脚本时,由于某种原因,它无法找到 fftw3 库。
这是我的配置行:
./configure --prefix=`pwd` --with-fft=fftw3 \
--with-fft-lib='-I/opt/local/include -L/opt/local/lib -lfftw3 -lm' \
--with-blas='-I/opt/local -L/opt/local -lblas' \
--with-lapack='-I/opt/local -L/opt/local -llapack' \
FCFLAGS='-O3 -m64'
我为 lapack、blas 和 fftw3 使用了完全相同的链接线。配置能够找到 lapack 和 blas 但无法链接 fftw3。有谁知道这里发生了什么?我将不胜感激任何帮助。
谢谢,科平约尔
大家好,
首先感谢 Hristo Iliev 之前的回答。我已经能够通过链接库来解决这个问题。您对库和主代码使用不同的编译器是正确的。这就是问题所在。当我用相同的编译器编译它们时,链接问题就消失了。但现在我有另一个问题。
在代码中有一个这样的函数调用:
call io_open(info_files(n_files)%unit,trim(dir)//"/info")
io_open
函数定义如下:
subroutine io_open(unit, file, status, form)
integer, intent(out) :: unit
character(len=*), intent(in) :: file
character(len=*), intent(in), optional :: status, form
integer :: iostat
character(len=20) :: status_, form_
我得到的错误是这样的:
call io_open(info_files(n_files)%unit, trim(dir)
1
Error: Syntax error in argument list at (1)
基本上,代码似乎给出了语法错误
trim(dir)//"/info"
这是函数调用中的文件名。
现在代码在 linux 机器上编译没有任何问题(我使用的是最新版本的 ubuntu)。我只在运行 osx 10.6 的 macbook pro 上收到错误。
同样令人惊讶的是,当我将一个额外的变量定义fname
为
fname=trim(dir)//"/info"
然后将其用于函数调用
call io_open(info_files(n_files)%unit,fname)
现在我可以在代码中的所有函数调用中进行替换,这些函数调用相当多,手动进行更改可能需要几个小时。但不知何故,使用相同编译器的相同代码在 linux 中编译没有错误但在 mac 中失败。有谁知道可能出了什么问题?我将不胜感激任何意见。
在此先感谢,
kopinjol