Fortran Coder

查看: 8856|回复: 9
打印 上一主题 下一主题

[混编] C调用Fortran的混编

[复制链接]

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
跳转到指定楼层
楼主
发表于 2017-9-29 22:14:36 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
因为某些很特殊的需要,需要实现C调用Fortran的静态链接库生成C的动态链接库(怎么会有这么奇葩的需求?)
之前做过C调用Fortran的Dll,还算顺利,但是这个好久没搞定。
请大侠指点!

附件:VS2012+IVF2015

ForLib.part01.rar

1.91 MB, 下载次数: 24

ForLib.part02.rar

1.61 MB, 下载次数: 17

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
沙发
 楼主| 发表于 2017-10-9 21:21:03 | 显示全部楼层
可以了!多谢!
看来这个ISO_C_Binding真要好好看看了。

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
板凳
 楼主| 发表于 2017-10-9 22:21:42 | 显示全部楼层
多问一句,如果我Fortran中作为输入参数的字符串长度不定,这里又该如何声明:
character(len=512) , pointer :: s

call c_f_pointer( ps , s )

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
地板
 楼主| 发表于 2017-10-10 16:31:54 | 显示全部楼层
好的 再次感谢。

123

帖子

32

主题

0

精华

宗师

F 币
1562 元
贡献
795 点
5#
 楼主| 发表于 2017-10-14 20:56:37 | 显示全部楼层
fcode 发表于 2017-10-10 08:27
一般来说,定义得足够长就可以了。因为是虚参,所以并不会占用过多内存空间。
其意义就像:“我以为它有512 ...

又遇到一个问题:
现在用Fortran创建静态链接库A.lib,其中的一个子程序F调用了已有的Fortran写的Dll中的子程序B,编译成功

(因为B在Module中,开始将Fortran的Dll对应的.lib添加到A.lib工程的source file中编译并不成功,提示 Error in opening the compiled module file.  Check INCLUDE paths.。后来发现,将dll对应的.mod文件复制到A.lib的工程中目录中即可,甚至都不需要添加Fortran的Dll对应的.lib添加到A.lib的source file即可成功)

然后用C语言创建C.Dll,调用了A.lib中的F,采用的是将A.lib添加到C.dll的source file中,提示B无法解析:
A.lib(A.obj) : error LNK2001: 无法解析的外部符号 B

这个要如何操作才能成功呢?
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-14 05:58

Powered by Tencent X3.4

© 2013-2024 Tencent

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