2017-02-08 4 views
1

私は非常に単純なプログラムを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 

すべてが

+3

**正確な**メイクファイルを表示してください。あなたは確か 'gfortran-c'を持っていません...なぜ、実行ファイルに' main.so'と名前をつけますか?拡張子 '.so'は共有ライブラリであり、プログラムではありません。また、厳密なコマンドによって、Segmantationフォルトが発生します。単純な '。/ main.so'であっても、使用している形式を正確に記述してください。 (そして、実際には 'real = 8'は醜いですが、ポータブルで悪くないし、倍精度と同じではありませんが、ここであまりにも何度もここに書きました) –

+0

typo here? 'gfortran-c' – agentp

+1

確かに、タイプミスですが、それは実際のMakefileが得られていないことを示していますが、役に立たないかもしれない単純化されています。 –

答えて

3
#Makefile 
main.exe: main.o cic.o 
    gfortran -o [email protected] $^ 
%.o: %.f90 
    gfortran -c $< 

[email protected]の作品$^は、 'すべての前提条件' であり、(file.oのここでは、main.exe)ターゲットであります(ここではmain.ocic.o)と$<は「前提条件」です(ここではcic.f90またはmain.f90)。共有オブジェクトとして何か他のもののための拡張機能として.soを使用してないhttps://www.gnu.org/software/make/manual/make.html

I二ウラジミールFを参照してください。

あなたは、コードに問題が続ける場合は、私たちなど、実際のコード、実際のメイクファイルを表示

EDIT:PS:あなたがMakefileをコピー&ペーストすると、タブとインデントを交換してください。

関連する問題