Fortran コードをコンパイルしようとしていますが、わかりにくいリンク エラーが発生します。コンパイルして静的ライブラリに配置するコードがいくつかあります。
>gfortran -c -I../../inc -o bdout.o bdout.F
>ar rv libgeo.a bdout.o
次に、いくつかの簡単なテスト コードを使用してそのライブラリに対してコンパイルを試み、次の結果を取得します。
>gfortran -o mytest -L -lgeo mytest.F
/tmp/cc4uvcsj.o: In function `MAIN__':
mytest.F:(.text+0xb0): undefined reference to `ncwrite1_'
collect2: ld returned 1 exit status
すべてが問題ないように見えるため、オブジェクトの命名には含まれていません。
>nm -u libgeo.a
bdout.o:
U _gfortran_exit_i4
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_character
U _gfortran_transfer_integer
U ncobjcl_
U ncobjwrp_
U ncopencr_
U ncopenshcr_
U ncopenwr_
U ncwrite1_
U ncwrite2_
U ncwrite3_
U ncwrite4_
U ncwritev_
元のオブジェクト ファイルも確認できます。
>nm -u bdout.o
U _gfortran_exit_i4
U _gfortran_st_write
U _gfortran_st_write_done
U _gfortran_transfer_character
U _gfortran_transfer_integer
U ncobjcl_
U ncobjwrp_
U ncopencr_
U ncopenshcr_
U ncopenwr_
U ncwrite1_
U ncwrite2_
U ncwrite3_
U ncwrite4_
U ncwritev_
テスト コードには、bdout.o で定義された関数への呼び出しが 1 つだけ含まれています。
program hello
print *,"Hello World!"
call ncwrite1( istat, f, ix2, ix3, ix4, ix5, ih )
end program hello
何が問題なのかわかりません。誰か提案はありますか?問題を追跡するための単なる方法でさえありますか?
乾杯。