0

数日前から、fortran90 と C で書かれた特定のコードをコンパイルしようとしています。gfortran と gcc を使用しています。コードは、lapack、blas、および fftw3 ライブラリにリンクする必要があります。Macbook Pro には 3 つすべてがインストールされています。しかし、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 のリンクに失敗します。ここで何が起こっているのか誰にも分かりませんか?助けていただければ幸いです。

ありがとう、コピンジョル

皆さんこんにちは、

まず最初に、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 では失敗するというのはどういうわけか意味がありません。何がうまくいかないのか、誰にもわかりませんか?ご意見をお待ちしております。

前もってありがとう、
コピンジョル

4

1 に答える 1

0

返信HristoIlievをありがとう。私はちょうど問題を理解しました。問題は、同じコンパイラの異なるバージョンを使用していたことでした。同じバージョンのコンパイラで環境変数を更新すると、すべてが機能し始めました。

これは私がしたことです、

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メーリングリストで説明されているように。

再度、感謝します、

コピンジョル

于 2012-07-06T10:46:00.850 に答える