编译Fortran代码读取NetCDF文件时提示找不到libnetcdff.a
解决gfortran编译NetCDF Fortran代码时的链接错误:
cannot find -libnetcdff.a 你这是踩了GCC链接器的常见语法坑,我来帮你理清楚问题和解决办法:
错误根源:链接库的写法不符合规则
你在编译命令里用了-libnetcdff.a,但GCC的-l选项有固定用法:它会自动给你指定的名字补上前缀lib和后缀.a/.so。也就是说,链接器看到-libnetcdff.a时,会去寻找libibnetcdff.a.a或者libibnetcdff.a.so这种不存在的文件,自然就报错找不到了。
修正后的编译命令
你的库文件是libnetcdff.a,所以只需要把链接选项改成-lnetcdff(去掉前面的lib和后面的.a)。另外注意你路径里的笔误:/use/local应该是/usr/local,修正后的完整命令如下:
gfortran -o firstrd -I/usr/local/include/ rdNetcdf.f90 -L/usr/local/lib/ -lnetcdff
额外说明
-L/usr/local/lib/这部分是对的,它告诉链接器去这个目录下查找库文件-I/usr/local/include/指定NetCDF头文件的目录,没问题- 如果你想确认库文件确实存在,可以在终端里跑这个命令验证:
应该能看到ls /usr/local/lib/libnetcdff*libnetcdff.a(可能还有动态库libnetcdff.so)
如果编译后运行程序时遇到动态库找不到的问题,可以临时设置环境变量:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
不过如果你用的是静态库(.a文件),就不需要这一步啦。
内容的提问来源于stack exchange,提问作者jide mutiu
相关产品推荐
相关产品推荐

