爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: Jillou娄

[求助] 【问题迭出】用坛友分享Fortran程序读nc文件编译完报错(已更新部分解决方法)

[复制链接]

新浪微博达人勋

发表于 2013-12-3 16:15:17 | 显示全部楼层
我没有足够的金钱下载netcdf.f90,就只有从unidata上下载了simple_xy_rd.f90;我的centos上也没有装ifort,所以就用了gfortran。然后用以下的命令编译成功。
gfortran -o simple_xy_rd simple_xy_rd.f90 -I/usr/lib64/gfortran/modules -lnetcdff
这个过程中,遇到了找不到“netcdf.mod”的错误,后来找到了它具体位置,加入-I/usr/lib64/gfortran/modules指明“netcdf.mod”的位置即可。
你能否把netcdf.f90发我一下,我来编译看看?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-3 21:15:33 | 显示全部楼层

恩,服务器上是ifort,所以就用个ifort编译的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-3 21:53:23 | 显示全部楼层
longlivehj 发表于 2013-12-3 21:01
呵呵,segmentation fault最讨厌了。
我注释掉netcdf.f90中的第84行后编译,通过命令行给可执行文件传递参 ...

我也用gfortran编译器按你的思路编译了这个程序,即:gfortran -o read netcdf.f90 -lnetcdff,可是报错显示/usr/bin/ld: cannot find -lnetcdff
collect2: ld returned 1 exit status,那就是说不能找到lnetcdff,我已经把netcdf.inc解压到同一目录下,使用了include ‘netcdf.inc’,为什么报错这么频繁。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-4 08:44:35 | 显示全部楼层
本帖最后由 longlivehj 于 2013-12-4 19:26 编辑
Jillou娄 发表于 2013-12-3 21:53
我也用gfortran编译器按你的思路编译了这个程序,即:gfortran -o read netcdf.f90 -lnetcdff,可是报错显 ...

哦,这个好解决。
出错的原因是找不到libnetcdff.so,因为它不在linux的一些标准位置。有两种方法:
1. 在命令行中加入-L/opt/netCDF4/lib,即gfortran -o read netcdf.f90 -L/opt/netCDF4/lib -lnetcdff,当然,首先要确保libnetcdff.so文件位于/opt/netCDF4/lib下。
2. 设置环境变量LD_LIBRARY_PATH,bash下的命令是export LD_LIBRARY_PATH=/opt/netCDF4/lib:$LD_LIBRARY_PATH
然后,在用gfortran编译试试。祝成功!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-4 10:14:37 | 显示全部楼层
学习了~{:eb502:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-4 18:59:22 | 显示全部楼层
longlivehj 发表于 2013-12-4 08:44
哦,这个好解决。
出错的原因是找不到libnetcdff.so,因为它不在linux的一些标准位置。有两种方法:
1. ...

不好意思,又打扰了。为什么按照步骤,编译几次通过后就又开始报错,这次按以上说明用ifort编译:语句是ifort -o readnc netcdf.f90 -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdff
,师兄确定路径是没有问题的,可是它又报错,这次报错原因不太一样,显示是ld: warning: libnetcdf.so.4, needed by /opt/netCDF4/lib/libnetcdff.so, not found (try using -rpath or -rpath-link),我这个新手还没碰过这种问题,它的意思是说libnetcdff.so这个动态库没调用成功吗?可是我去、opt/netCDF4/lib/中看了一下libnetcdf.so是存在的。这个怎么才能解决这个问题。报错截图如下:(还有题外话:为什么程序是按F90书写的,函数库却还是调用的F77的版本)
QQ截图20131204185227.png
求借时间解答,谢谢你。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-4 19:24:03 | 显示全部楼层
按错误提示,是libnetcdf.so.4没有找到,但是既然libnetcdf.so存在,可以考虑做个软链接试试。
ln -sf /opt/netCDF4/lib/libnetcdf.so /opt/netCDF4/lib/libnetcdf.so.4
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-4 19:28:35 | 显示全部楼层
呵呵,真的很奇怪,不是fortran库找不到就是c库找不到,如果还有问题,可能需要你提供一些环境变量,比如LD_LIBRARY_PATH等。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-4 19:35:55 | 显示全部楼层
longlivehj 发表于 2013-12-4 19:28
呵呵,真的很奇怪,不是fortran库找不到就是c库找不到,如果还有问题,可能需要你提供一些环境变量,比如LD ...



这是.bashrc中的netCDF路径设置,我也觉得没问题
QQ截图20131204192953.png
然后服务器上/opt/里的netCDF,mpich,hdef5都是read-only文件,我没有权限做软链。

看来我还是对着官网上的一堆调用函数自己编了,这个程序在我用的服务器上出错太频繁了。

谢谢你~~~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-4 20:03:15 | 显示全部楼层
Jillou娄 发表于 2013-12-4 19:35
这是.bashrc中的netCDF路径设置,我也觉得没问题

然后服务器上/opt/里的netCDF,mpich,hdef5都是re ...

哈哈,原来是这样!
linux环境千差万别,没有帮你解决,不好意思。
你怎么不用其它更加方便的软件呢?比如ncl,我看见你有提关于ncl做图的问题。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表