私は非常に単純なプログラムをMakefileでコンパイルしようとしています。 プログラムmain.f90
はモジュールcic.f90
を使用しています。Fortranファイルを含むシンプルなメークファイルがセグメンテーションフォールトを起こしています
main.f90の
program main
use cic, only: pi, area
implicit none
real(kind=8) :: a
! print parameter pi defined in module:
print *, 'pi = ', pi
! test the area function from module:
a = area(2.d0)
print *, 'area for a circle of radius 2: ', a
end program main
モジュールファイル::私が作成したcic.f90
module cic
implicit none
real(kind=8), parameter :: pi = 3.141592653589793d0
contains
real(kind=8) function area(r)
real(kind=8), intent(in) :: r
area = pi * r**2
end function area
real(kind=8) function circumference(r)
real(kind=8), intent(in) :: r
circumference = 2.d0 * pi * r
end function circumference
end module cic
相続人は、単純なMakefileの:
これら
はファイルであります#Makefile
main.so: main.f90 cic.o
gfortran -o main.so main.f90 cic.o
cic.o: cic.f90
gfortran-c cic.f90
これはmain.so
ファイルを作成しますが、私は試してみて、実行したとき、それは私がUbuntuを使用して仮想マシンを使用しています、次のエラーに
Segmentation fault (core dumped)
を与えます。 .f90
の代わりにcic.mod
であるか、モジュールのターゲットを.o
の代わりに.mod
にする必要がありますか?さらに
、私は次のように書いて、端末を使用してコンパイルします。
gfortran main.f90 cic.f90 -o main.so
すべてが
**正確な**メイクファイルを表示してください。あなたは確か 'gfortran-c'を持っていません...なぜ、実行ファイルに' main.so'と名前をつけますか?拡張子 '.so'は共有ライブラリであり、プログラムではありません。また、厳密なコマンドによって、Segmantationフォルトが発生します。単純な '。/ main.so'であっても、使用している形式を正確に記述してください。 (そして、実際には 'real = 8'は醜いですが、ポータブルで悪くないし、倍精度と同じではありませんが、ここであまりにも何度もここに書きました) –
typo here? 'gfortran-c' – agentp
確かに、タイプミスですが、それは実際のMakefileが得られていないことを示していますが、役に立たないかもしれない単純化されています。 –