我試圖編譯一些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定義的函數的單個調用:
program hello
print *,"Hello World!"
call ncwrite1(istat, f, ix2, ix3, ix4, ix5, ih)
end program hello
我想不通的問題是什麼。有沒有人有什麼建議?甚至可能只是一種追蹤問題的方法?
乾杯。
是的,我只是試圖把鏈接器命令最後但問題仍然存在。-L。意味着-L在。 (當前)目錄。 – Brandon 2010-04-01 20:48:43
我的意思是,在你的問題中你有一個空的-L,沒有「。」 – janneb 2010-04-01 21:25:34
對不起,沒有注意到。它在輸入問題時丟失了。顯然這也不是問題。 – Brandon 2010-04-02 01:22:52