请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 8990|回复: 8

[经验总结] 【NCL调用Fortran子程序】生成.so文件出错·已解决

[复制链接]

新浪微博达人勋

发表于 2018-7-11 16:26:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 立方光年的团子 于 2018-12-15 21:52 编辑

【NCL调用Fortran子程序】目的:结合fortran计算快、ncl写入nc文件方便的特点
问题:在生成.so文件时出现错误

-------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------

思考过程:
根据官网试过,对stub和f90都做过dos2unix 处理,试过减少传递参数的个数,如subroutine AMSRE_todaily_to0_5grid(newtba_day),均无效,求大神指点
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-11 16:31:42 | 显示全部楼层
补充说明:
1.stub和f90的参数名不一样应该是不影响的
2.stub中的real换成dimension也不行

第一次用ncl调用比较大的fortran程序,经验不足,如果大神们有相关的学习资料,希望可以分享一下啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-11 16:32:11 | 显示全部楼层
先谢谢各位啦!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-11 23:10:37 | 显示全部楼层
本帖最后由 立方光年的团子 于 2018-12-15 21:52 编辑

不知道为什么又可以了。但是生成了.so文件后,使用时一直报错
---------- 正确生成so时显示 -----------------
WRAPIT Version: 120209
COMPILING f4-1_todaily.f90
LINKING
END WRAPIT


------------------- ncl 报错 --------------------
fatal:syntax error: procedure AMSRE_todaily_to0_5grid is not defined in package FUNC

fatal:error at line 35 in file n4_write_daily.ncl

fatal:Syntax Error in block, block not executed
fatal:error at line 37 in file n4_write_daily.ncl
---------------------
用 nm -D f4-1_todaily.so 看了一下里面的函数变量名
0000000000001451 T AMSRE_todaily_to0_5grid_W
0000000000000f7c T Init
                 U NclGetArgValue
                 U NclRegisterProc
                 U NewArgs
                 U NrmQuarkToString
                 U NrmStringToQuark
                 U SetArgTemplate
                 w _Jv_RegisterClasses
0000000002430fc0 B __BLNK__
0000000000203e60 A __bss_start
                 w __cxa_finalize
                 w __gmon_start__
0000000000203e60 A _edata
0000000002430fc8 A _end
0000000000003928 T _fini
                 U _gfortran_compare_string
                 U _gfortran_concat_string
                 U _gfortran_internal_pack
                 U _gfortran_internal_unpack
                 U _gfortran_st_close
                 U _gfortran_st_open
                 U _gfortran_st_read
                 U _gfortran_st_read_done
                 U _gfortran_st_write
                 U _gfortran_st_write_done
                 U _gfortran_string_trim
                 U _gfortran_transfer_character
                 U _gfortran_transfer_integer
                 U _gfortran_transfer_real
0000000000000ca8 T _init
0000000000001c50 T amsre_todaily_to0_5grid_
0000000000001bdf T askave_
0000000000001c05 T askpercent_
                 U free
0000000000001bb0 T ifandsum_
                 U malloc
                 U memmove
                 U memset
                 U strcpy


实在很奇怪啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-12 11:57:15 | 显示全部楼层
好了,解决了,修改了一下函数名
函数名的设置有几个要点:(可能不全,但以下皆为本人实验后的经验总结)
1.不能出现“_”,"-"等字符
2.不能出现大小写混写
3.数字可出现在除开头外的任何位置(该点同fortran变量命名一致)
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2018-7-12 11:57:59 | 显示全部楼层
想删帖咋整。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-2-13 14:27:13 | 显示全部楼层
别删贴呀,我最近也在尝试ncl调用Fortran子程序,用官网上例子试运行,结果生成不了so文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-9-14 20:00:21 | 显示全部楼层
我最近生成.so文件的时候遇到了这个问题Could not find Init() in external file .so, file not loaded, 用过dos2unix也不可以,自己的.f90文件是可以编译的,但是外接在ncl里就有这个问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-10-25 22:35:54 | 显示全部楼层
周紫薇 发表于 2019-9-14 20:00
我最近生成.so文件的时候遇到了这个问题Could not find Init() in external file .so, file not loaded,  ...

请问你解决了吗?我也遇到这个问题了,想取取经
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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