我不是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