【发布时间】:2010-07-29 18:18:51
【问题描述】:
我不是 Fortran 程序员(只是短暂的经验),但我需要编译一个部分用F77 编写的程序。有人在我之前用Absoft编译器编译过它,但现在我需要在另一台机器上用g77重复这个过程。对于 Absoft,makefile 有
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'
我该如何解决这个问题?
更新1
如果我将-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
但即使我在源目录中执行以下操作
$ 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的内容。
标签: fortran fortran77 gfortran g77