数日前から、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 では失敗するというのはどういうわけか意味がありません。何がうまくいかないのか、誰にもわかりませんか?ご意見をお待ちしております。
前もってありがとう、
コピンジョル