我遇到将HDF-EOS库链接到Fortran90程序的问题。我已将库从源编译到$ prefix中指定的目录。我的简单编译命令是:
gfortran -I$prefix/include -L$prefix/lib -Wl,-rpath -Wl,$prefix/lib -lhdfeos -lGctp -lmfhdf -ldf -lz -lsz -ljpeg tst.f90
编译时,我收到以下错误:
undefined reference to `gdopen_'
在我不应该更改的程序中,HDF-EOS库通过外部关键字使用,例如
integer(kind=4), external :: gdopen
在库中, nm $ prefix / lib / libhdfeos.a | grep gdopen 给了我:
00000000000120c0 T gdopen
使用 -fno-underscoring 进行编译时,我得到一个不同的错误:
gfortran -fno-underscoring -I$prefix/include -L$prefix/lib -Wl,-rpath -Wl,$prefix/lib -lhdfeos -lGctp -lmfhdf -ldf -lz -lsz -ljpeg tst.f90
错误是:
undefined reference to `gdopen'
此外,gfortran找到了库,否则会抱怨。错误是否与下划线有关?我还能尝试什么?我在Fedora和gfortran版本4.7.2上工作。
答案 0 :(得分:1)
是的,很可能是由下划线引起的。
尝试使用-fno-underscoring
(https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html)进行编译,但通过适当的bind(C)
界面进行修复会更好。
This tutorial(你在去这里之前读过它吗?很容易找到,即使是像我这样的库中的新手。)也说明你应该使用-fno-underscoring
。
继续实施教程推荐的其余内容,包括使用FC=$(HDF4_DIR)/bin/h4fc
进行编译。