Fortran에서 모듈 사용 :`parse_ '에 대한 정의되지 않은 참조

글 래더

Fortran90에서 문자열을 구문 분석하기 위해 여기설명 된 구문 분석 루틴 을 사용하려고합니다 . 문서의 링크를 따라 가면 두 개의 f90 파일이있는 .zip 파일을 다운로드 할 수 있습니다 . 그런 다음 그들을 컴파일했습니다 gfortran -c precmod.f90 && gfortran -c stringmod.f90. use strings내 프로그램 에도 추가 했습니다.

그럼에도 불구하고 컴파일 할 때 다음과 같은 오류가 발생합니다 ( gfortran stringmod.o precmod.o calcs.o server.o).

calcs.o: In function `calculate_':
calcs.f90:(.text+0x174): undefined reference to `parse_'
collect2: error: ld returned exit status 1

calcs.f90은 아래에 표시되고 server.o는 calcs에 의해 호출되어야하는 C로 작성된 서버입니다.

program name
use strings
use iso_c_binding, only: C_CHAR, C_NULL_CHAR, C_INT

implicit none

    ! type declaration statements
    character(255) query
    integer calc, ans, portnum, calculate

    interface
        subroutine server(portnum) bind(C, name="server")
            use iso_c_binding, only: c_int
            integer(kind=c_int), value :: portnum
        end subroutine server
    end interface

    ! executable statements
    print *, "Please provide me with a port number. Plz. <3"
    read "(1i9)", portnum
    call server(portnum)

end program name

function calculate(query)
implicit none

    character(255) query, op
    integer length, i, calculate
    integer, dimension (:,:), allocatable :: inputarray

    call parse(query, ' ', inputarray, length)

    do i=1,size(inputarray)
        print *, inputarray(i, 1)
    end do

    calculate = 5

end function calculate

나는 publicstringmod.f90의 상단에 추가하려고했습니다 .

Francescalus

우리가 뭔가를 가질 때

program
end program

function func()
end function

이 함수 func주 프로그램과 동일한 소스 코드 파일에서 제공되는 경우에도 외부 함수 입니다. 이 외부 기능은 주 프로그램에 대해 전혀 알지 못하므로 주 프로그램은 외부 기능에 대해 거의 알지 못합니다.

이러한 지식 부족의 일부는 질문의 예에서 서브 루틴 parse이 메인 프로그램에서 명시 적 인터페이스 (모듈을 통해)를 가지고 있다는 사실이 calculate.

즉, 함수 calculate에는 자체 범위가 있고 호스트가 없습니다. 모듈 프로 시저에 액세스하려면 모듈 parse자체를 사용할 수 있습니다 strings.

function calculate(query)
  use strings, only : parse
  implicit none
end function

.NET parse의 모듈 프로 시저 라는 인식 부족에 대한 힌트가 있습니다 strings. parse_(단일 후행 밑줄) 의 이름 장식 은 외부 절차를 엉망으로 만드는 일반적인 방법입니다. 모듈 프로 시저 (없음 bind(c))는 일반적으로 훨씬 더 정교한 기호 이름을 갖습니다.

마지막으로 댓글에서 무언가를 반복하겠습니다. 앞서 메인 프로그램은 외부 기능에 대해 거의 모른다고 말했습니다. 메인 프로그램에는 다음과 같은 선언이 있습니다.

integer ... calculate

이는 외부 함수 calculate(암시 적 인터페이스가 있음)에 정수 반환 유형이 있음을 나타냅니다. 이 경우 함수는 대신 내부 함수로 만들 수 있습니다.

program
  use strings, only : parse
 contains
  integer function calculate
  end function
end program

함수 calculate는 명시 적 인터페이스 (메인 프로그램에서 반환 선언의 필요성 제거)를 가질뿐만 아니라 parse호스트 연결 통해 액세스 할 수도 있습니다 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

rtems에서 powf 함수 사용 (powf에 대한 정의되지 않은 참조)

C에서 sqrtf () 사용하기 : "`sqrtf '에 대한 정의되지 않은 참조"

SVM-Struct에서 sqrt에 대한 정의되지 않은 참조(-lm 사용)

cmake 및 opencv를 사용하여 "할로우 월드"오류 빌드 : 비주얼리 제이션의 모듈에 대한 정의되지 않은 참조

ctor 및 ctor 복사에 대한 정의되지 않은 참조

C- '-lm'을 사용해도 "sqrt"에 대한 정의되지 않은 참조

ifort / icc를 사용할 때 'main'에 대한 정의되지 않은 참조

OpenCV : cmake를 사용할 때`cv :: imread에 대한 정의되지 않은 참조

Pycharm에서 부모 디렉터리의 모듈 가져 오기에 대한 해결되지 않은 참조

모듈 구성원에 대한 PyCharm 확인되지 않은 참조

C ++의 모든 함수에 대한 정의되지 않은 참조

"<class>에 대한 typeinfo"에 대한 정의되지 않은 참조

Number에 대한 vtable에 대한 정의되지 않은 참조

sprintf ()를 사용할 때 __mulhi3에 대한 정의되지 않은 참조-Windows의 Code :: Blocks에서 AVR GCC

Eclipse의 OpenSSl 앱용 함수에 대한 정의되지 않은 참조

make에서`main '에 대한 정의되지 않은 참조

C에서 (FUNCTIONNAME)에 대한 정의되지 않은 참조

Conctructor 및 소멸자 모두에 대한 정의되지 않은 참조

cmake : 모든 pcap 함수에 대한 정의되지 않은 참조

안드로이드에서 JNI를 사용하는 '곱하기'에 대한 정의되지 않은 참조

`yylex '에 대한 정의되지 않은 참조 &&`yyin'에 대한 정의되지 않은 참조

C ++ Code :: morsecode ()에 대한 정의되지 않은 참조 및 Code :: alphacode ()에 대한 정의되지 않은 참조

Qt Quick + CMake + 사용자 정의 QObject는 `vtable'에 대한 정의되지 않은 참조를 생성합니다.

모듈에 대한 Rails 정의되지 않은 메서드

유형이 지정되지 않은 npm 모듈에 대한 TypeScript 사용자 정의 선언 파일

초기화되지 않은 메모리에 대한 참조입니다. 정의되지 않은 동작?

CMake를 사용하여 lib .a로 생성 된 메서드에 대한 정의되지 않은 참조

`vtable에 대한 이상한 정의되지 않은 참조

정적 constexpr에 대한 정의되지 않은 참조

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관