我不是Fortran程序員(只是一個很短的經驗),但我需要編譯一個部分寫在F77
中的程序。有人在我之前編譯了Absoft
編譯器,但現在我需要在g77
的另一臺機器上重複該過程。對於Absoft公司,makefile文件有F77:使用g77編譯的程序問題通常使用Absoft編譯器進行編譯
f77 -f -w -O -B100 -B108 -c *.f
mv *.f flib && mv *.o olib
f77 -B100 -o runme olib/*.o clib/*.o -L/usr/X11R6/lib64 -L/usr/X11R6/lib -lX11 -L$PVM_ROOT/lib/$PVM_ARCH -lfpvm3 -lpvm3 -L$ABSOFT/lib -lU77
我已經修改了這些行是
g77 -w -O -B100 -B108 -c *.f
mv *.f flib && mv *.o olib
g77 -B100 -o runme olib/*.o clib/*.o -L/usr/X11R6/lib64 -L/usr/X11R6/lib -lX11 -L$PVM_ROOT/lib/$PVM_ARCH -lfpvm3 -lpvm3 -lgfortran -lgfortranbegin
,但我得到了以下錯誤消息
somefile.f:(.text+0x93): undefined reference to `for_open'
somefile.f:(.text+0xf4): undefined reference to `for_write_seq_fmt'
somefile.f:(.text+0x128): undefined reference to `for_write_seq_fmt_xmit'
somefile.f:(.text+0x454): undefined reference to `for_read_seq'
我該如何解決這個問題?
UPDATE1
如果我添加-libifcore
到最後一行(連接器)的結束,然後我得到
/usr/bin/ld: cannot find -libifcore
我已經找到了庫
$ find /opt/intel/* -name 'libifcore*'
/opt/intel/fce/9.1.036/lib/libifcore.a
/opt/intel/fce/9.1.036/lib/libifcore.so
/opt/intel/fce/9.1.036/lib/libifcore.so.5
/opt/intel/fce/9.1.036/lib/libifcore_pic.a
/opt/intel/fce/9.1.036/lib/libifcoremt.a
/opt/intel/fce/9.1.036/lib/libifcoremt.so
/opt/intel/fce/9.1.036/lib/libifcoremt.so.5
/opt/intel/fce/9.1.036/lib/libifcoremt_pic.a
但即使我在源目錄中執行以下操作ectory
$ export PATH=$PATH:/opt/intel/fce/9.1.036/lib/
$ ln -s /opt/intel/fce/9.1.036/lib/libifcore.so
找不到它。
而且,在同一臺機器在那裏我得到了另一個問題How to pass -libm to MPICC? libimf.so: warning: feupdateenv is not implemented and will always fail
看來,編譯器應該找到庫,如果需要的話
$ echo $LD_LIBRARY_PATH
/opt/intel/fce/9.1.036/lib:/opt/intel/cce/9.1.042/lib:/usr/local/lib/openmpi:/usr/local/lib:/usr/lib:
庫的動態鏈接不依賴於'PATH',而是依賴於'ldd.conf'和'LD_LIBRARY_PATH'的內容。 – dmckee 2010-07-29 23:16:36