Fortran Coder

查看: 8315|回复: 10
打印 上一主题 下一主题

[混编] 已有interface,仍出现“无法解析的外部符号”

[复制链接]

8

帖子

2

主题

0

精华

入门

F 币
62 元
贡献
23 点
跳转到指定楼层
楼主
发表于 2021-11-7 21:51:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
win10 + vs community 2019 + intel oneAPI + intel fortran complier

模型源代码较老,为f77文件,需要调用.c文件进行数据输入输出。所有对c的调用均编写了INTERFACE,不管是main函数还是其他函数中都是如此。举个例子啊:


但是所有的调用均失败,出现”LNK2019:无法解析的外部符号“问题:


小白一个,把论坛里相关帖子翻了几遍,感觉都对应不上,不知道问题出在哪里?‘
主要是不知道是不是代码本身有问题,或者是配置环境的问题?我应该怎么做才能让模型跑起来,还请大神们赐教。
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

沙发
发表于 2021-11-8 08:53:10 | 只看该作者
混合编程不太懂,但是看提示是没有找到对应函数,应该是c编译的文件或者库没有找到

8

帖子

2

主题

0

精华

入门

F 币
62 元
贡献
23 点
板凳
 楼主| 发表于 2021-11-8 10:15:46 | 只看该作者
necrohan 发表于 2021-11-8 08:53
混合编程不太懂,但是看提示是没有找到对应函数,应该是c编译的文件或者库没有找到 ...

对的,确实是没有找到。库没有找到是指没有链接合适的lib文件吗?

250

帖子

2

主题

0

精华

宗师

F 币
1730 元
贡献
872 点

规矩勋章

地板
发表于 2021-11-9 08:20:55 | 只看该作者
本帖最后由 necrohan 于 2021-11-9 08:22 编辑
ptxyzs2 发表于 2021-11-8 10:15
对的,确实是没有找到。库没有找到是指没有链接合适的lib文件吗?

是,看看链接库有没有引用,是不是和平台对应的版本
有时候是c编译的obj文件直接插入fortran的project

1961

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1350 元
贡献
570 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

5#
发表于 2021-11-9 08:54:16 | 只看该作者
建议用 iso_c_binding 来混编。不要写 !ms$Attributes , alias 这种语句。
另外,发帖时对代码,最好是复制粘贴,而不是截图。(其他人能复制粘贴,帮你测试)

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
6#
发表于 2021-11-9 18:04:06 | 只看该作者

8

帖子

2

主题

0

精华

入门

F 币
62 元
贡献
23 点
7#
 楼主| 发表于 2021-11-17 09:46:35 | 只看该作者
necrohan 发表于 2021-11-9 08:20
是,看看链接库有没有引用,是不是和平台对应的版本
有时候是c编译的obj文件直接插入fortran的project

把大家的方法都试了一遍,时隔一个星期再来回复,发现最直接的方法确实是您这种,将c编译的obj文件直接添加到fortran source文件夹下就可以直接编译了,感谢您!!

8

帖子

2

主题

0

精华

入门

F 币
62 元
贡献
23 点
8#
 楼主| 发表于 2021-11-17 09:53:34 | 只看该作者
li913 发表于 2021-11-9 18:04
混编看这里视频 https://www.bilibili.com/video/BV1XD4y1S7jz?p=6

谢谢您!!把您发的视频仔细看了一遍,成功使用c语言调用了fortran语言。但是想要运用fortran语言调用c语言时,可以生成dll文件无法生成有效的lib文件,查询发现是因为缺少extern "C" _declspec(dllexport)语句,由于代码的数量太大,对每个代码都进行修改不太现实,不知道是否有更简便的方法呢?

8

帖子

2

主题

0

精华

入门

F 币
62 元
贡献
23 点
9#
 楼主| 发表于 2021-11-17 09:56:44 | 只看该作者
fcode 发表于 2021-11-9 08:54
建议用 iso_c_binding 来混编。不要写 !ms$Attributes , alias 这种语句。
另外,发帖时对代码,最好是复制 ...

谢谢您的建议与提醒!!因为代码比较长因此没有直接提供源代码,下次一定注意!
查询得知iso_c_binding是2003版的语言,源代码为77版,写法差异较大,请问这种版本上的混合对于fortran语言的编写是否可行呢?

798

帖子

2

主题

0

精华

大宗师

F 币
3793 元
贡献
2268 点
10#
发表于 2021-11-17 10:42:09 | 只看该作者
ptxyzs2 发表于 2021-11-17 09:53
谢谢您!!把您发的视频仔细看了一遍,成功使用c语言调用了fortran语言。但是想要运用fortran语言调用c语 ...

理论上仅需要对导出函数的文件做处理。其他文件,如果没有导出函数,我觉得不需要修改。你试试吧。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-25 11:40

Powered by Tencent X3.4

© 2013-2024 Tencent

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