爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 14938|回复: 27

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

[复制链接]

新浪微博达人勋

发表于 2013-12-2 22:46:52 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 Jillou娄 于 2013-12-4 19:56 编辑

使用的读取netCDF的Fortran程序是wlzhongouc坛友分享的,链接请戳→ http://bbs.06climate.com/forum.php?mod=viewthread&tid=4731

按他的方法试过多次,有一次瞎猫撞见死耗子,编译通过,但兴奋是短暂的,之后使用一直报错,且自己修改都无法通过,不知何原因。问一下万能的坛友~~~
问题:按要求将netcdf.f90中的inputfile改为自己的nc文件:然后编译这个fortran程序:
ifort netcdf.f90 -o read -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdff
(已确定netcdf的路径都书写正确)
然后报错截图:
1.png
截图显示各种变量都未定义!我估计错在netcdf.f90程序中的include ‘netcdf.inc’这条程序上,就是头文件没调成功,于是试着将这条语言改为了use netcdf,再编译ifort netcdf.f90 -o read -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdff
结果还是报错。报错截图如下
3.png
出错原因是说use netcdf这个全局变量在此处无效。
我就不知道哪里要修改或是哪里出错了?求解。

解决方法:1.将原程序中include ‘netcdf.inc’改为use netcdf,更改输入nc文件名,同时为了不与use netcdf中的netcdf冲突,将program netcdf和end netcdf这两条语句改成program main和end main保存(万万没想到,报错是因为这个原因)

               2.编译:ifort netcdf.f90 -o read -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdff  
                             或者选择其他Fortran编译器。
               3.生成read可执行文件不报错








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

新浪微博达人勋

发表于 2013-12-3 19:25:24 | 显示全部楼层
“This global name is invalid in this context”错误可能是因为你采用“use netcdf”的方式,netcdf和你program的名字相同造成的。
不过这个可能跟ifort有关,我用gfortran,即使采用use netcdf也不报错,能够生成可执行文件。
你必须要用intel的编译器么?我一会儿到高性能计算机上试试,上面有ifort。

评分

参与人数 1金钱 +1 收起 理由
乌兰兰111 + 1 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2013-12-3 20:27:20 | 显示全部楼层
本帖最后由 Jillou娄 于 2013-12-3 20:32 编辑

弱弱的补充一句:我将程序名称换成main后编译不报错,能生成可执行文件,可是在执行可执行文件时(./nc)时,又报错了。这又是什么个状况,又高兴太早了。而且生成的read_netcdf.f90文件是空的。
QQ截图20131203201924.png

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

新浪微博达人勋

发表于 2013-12-3 21:01:42 | 显示全部楼层
呵呵,segmentation fault最讨厌了。
我注释掉netcdf.f90中的第84行后编译,通过命令行给可执行文件传递参数,可以运行,并得到read_netcdf.f90。以下是命令:
gfortran -o read netcdf.f90 -lnetcdff
./read /home/cream/Downloads/hgt.2006.nc
终端有Generated fortran program called 'read_netcdf.f90'的显示成功的输出。

不太清楚这个错误什么原因。想问问,你netcdf是否也是用ifort编译?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-3 13:11:25 | 显示全部楼层
longlivehj 发表于 2013-12-3 11:43
ifort netcdf.f90 -o read -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdf
最后的-lnetcdf改成-lne ...

先谢谢你,但是修改后,报错信息还是一样的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-3 11:43:18 | 显示全部楼层
ifort netcdf.f90 -o read -I/opt/netCDF4/include -L/opt/netCDF4/lib -lnetcdf
最后的-lnetcdf改成-lnetcdff试试,感觉应该引用netcf fortran函数库。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-3 18:49:17 | 显示全部楼层
This global name is invalid in this context. 到底怎么解决这个报错,太伤脑经了。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-12-3 19:15:09 | 显示全部楼层
嗯,我可以下载,还花了5个金币,没钱了。
解压其中的netcdf.inc和netcdf.f90,并且netcdf.f90里面采用include 'netcdf.inc'的方式,可以用下面的语句成功编译:
gfortran -o read netcdf.f90 -lnetcdff

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

新浪微博达人勋

 楼主| 发表于 2013-12-3 19:59:52 | 显示全部楼层
longlivehj 发表于 2013-12-3 19:25
“This global name is invalid in this context”错误可能是因为你采用“use netcdf”的方式,netcdf和你p ...

谢谢谢谢!!!!谢谢你给提供了思路,我将program netcdf和end netcdf 都改成了main,不与use netcdf 冲突后,不报错了。非常感谢~~~太激动了。。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-12-3 17:17:24 | 显示全部楼层
longlivehj 发表于 2013-12-3 16:15
我没有足够的金钱下载netcdf.f90,就只有从unidata上下载了simple_xy_rd.f90;我的centos上也没有装ifort, ...

也不知道这样违不违反论坛规定,你先看着,如果违规,我立马删除~~~

Fortran_nc.rar (70.67 KB, 下载次数: 29)
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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