我一直在努力编写一个用fortran90和C编写的代码,现在已经有几天了。我正在使用gfortran和gcc。代码需要链接到lapack,blas和fftw3库。我已经在我的macbook pro中安装了所有这三个。但是当我运行configure脚本时,由于某种原因,它无法找到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。有谁知道这里发生了什么?我将不胜感激任何帮助。
谢谢, kopinjol
大家好,
首先感谢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
答案 0 :(得分:0)
感谢Hristo Iliev的回复。我刚刚弄明白了这个问题。问题是我使用的是同一编译器的不同版本。一旦我用相同版本的编译器更新了环境变量,它就开始工作了。
这就是我所做的,
export FC="gfortran-mp-4.6 -m64"
export F77="gfortran-mp-4.6 -m64"
export F90="gfortran-mp-4.6 -m64"
export CC="gcc-mp-4.6 -m64"
export CXX="g++-mp-4.6 -m64"
export CPP="cpp-mp-4.6 -m64 -C -ansi"
export FCCPP="cpp-mp-4.6 -m64 -C -ansi"
export FCFLAGS="-O3"
export FFLAGS="-O3"
如APE邮件列表中所述。
再次感谢,
kopinjol