Linker 从Mac OSx 10.6中的gfortran链接预装库

Linker 从Mac OSx 10.6中的gfortran链接预装库,linker,gfortran,Linker,Gfortran,几天来,我一直在尝试编译用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 -lf

几天来,我一直在尝试编译用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使用了完全相同的链接线。Configure能够找到lapack和blas,但无法链接fftw3。有人知道这里发生了什么吗?我将感谢任何帮助

谢谢, 科平约尔

大家好,

首先感谢赫里斯托·伊利耶夫早些时候的回答。我已经能够通过链接库来解决这个问题。对于库和主代码使用不同的编译器,您是对的。这就是问题所在。当我用同一个编译器编译它们时,链接问题就消失了。但现在我有另一个问题

在代码中有这样一个函数调用:

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中失败,这在某种程度上是没有意义的。有人知道可能出了什么问题吗?如有任何意见,我将不胜感激

提前感谢,

科平约尔

感谢赫里斯托·伊利耶夫的回复。我刚刚解决了问题。问题是我使用的是同一个编译器的不同版本。一旦我用相同版本的编译器更新了环境变量,它就开始工作了

这就是我所做的

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

configure
生成一个名为
config.log
的日志文件。通过搜索查看
configure
如何准确地测试FFTW的可用性,以及测试失败的具体原因。Hi Hristo Iliev,感谢您的回复。我查看了config.log文件,下面是我得到的:configure:6309:检查dfftw_plan_dft_1d in-lfftw3 configure:6327:gfortran-o conftest-O3-m64 conftest.f90-lfftw3-I/opt/local/include-L/opt/local/lib-lfftw3-lfftw3f>&架构x86_64的5个未定义符号:“dfftw_plan_dft_1d”,引用自:ccmkBOaT.o ld中的\u main:未找到架构x86\u 64 collect2的符号:ld返回1退出状态。配置:6334:$?=1配置:失败的程序是:| program main | call dfftw_plan _dft_1d | End在尝试构建64位版本的代码时,您似乎只有32位版本的FFTW。谢谢您的回答。我刚刚更新了我的问题。代码中还存在其他问题。我想知道你是否知道。你在OSX和Ubuntu机器上都有哪些
gfortran
版本?