2017-02-08 1 views
1

의 결과입니다. 프로그램 main.f90은 모듈 cic.f90만을 사용합니다.간단한 메이크 내가 메이크와 아주 간단한 프로그램을 컴파일하려고 분할 오류

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 

Heres는 간단한 메이크 :

는 파일입니다
#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 파일을 생성하지만 시도하고 실행할 때 내가 우분투를 실행하는 가상 머신을 사용하고 다음과 같은 오류를

Segmentation fault (core dumped) 

을 제공합니다. 는 목표를 함께 할 수있는 것이 무엇인가 아니면 내가 모듈 파일을 명명하는 방법, 그것은 cic.mod 대신 .f90해야 또는 모듈의 대상이 .mod 대신 .o해야 하는가? 나는 다음과 같은 기록 터미널을 사용하여 컴파일 할 때

또한, (여기, file.omain.exe)

gfortran main.f90 cic.f90 -o main.so 

모든

+3

보여주세요 ** 정확한 ** 당신은 메이크. 거기에는'gfortran-c'가 없습니다 ... 또한 실행 파일의 이름을 왜 main.so로 지정합니까? 확장자'.so '는 프로그램이 아닌 공유 라이브러리를위한 것이다. 또한, 어떤 정확한 명령으로 Segmantation 오류가 발생합니다. 단순한'./main.so' 인 경우에도 사용중인 정확한 양식을 적어주십시오. (그리고 BTW,'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] 작동되는 대상을, $^는 '모든 전제 조건'이다 (여기서,와 main.ocic.o) 및 $<는 (여기서, cic.f90 또는 main.f90 하나) '필수'이다. 공유 객체로 뭔가 다른 확장으로 .so를 사용 하지https://www.gnu.org/software/make/manual/make.html

내가 두 번째 블라디미르 F를 참조하십시오.

당신이 코드에 문제가 계속되면, 우리에게 등 실제 코드, 실제 makefile을 보여

편집 : PS : 당신이 Makefile을 붙여 복사 할 경우, 탭으로 들여 쓰기를 교체해야합니다.

관련 문제