Fortran Coder

查看: 7280|回复: 6
打印 上一主题 下一主题

[混编] C Fortran 混合编程

[复制链接]

10

帖子

2

主题

0

精华

入门

F 币
52 元
贡献
29 点
跳转到指定楼层
楼主
发表于 2015-11-30 15:44:09 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
我在使用C,Fortran混合编程时遇到如下问题:fmain.obj : error LNK2019: unresolved external symbol _addnumber referenced in function _MAIN__,各位大侠知道该怎么解决吗?
我的Fortran代码为:
[Fortran] 纯文本查看 复制代码
    program fmain
    use,intrinsic:: iso_c_binding
    implicit none
    interface
        subroutine AddNumber(res,num) bind(C)
        use,intrinsic:: iso_c_binding,only: C_INT, C_DOUBLE
        implicit none
        real(kind=C_DOUBLE):: res
        integer(kind=C_INT):: num
        end subroutine AddNumber
    end interface
    integer(kind=4):: num
    real(kind=8):: res
    res=0d0
    do while(.true.)
        write(*,*) 'please input a integral number:'
        read(*,*) num
        call AddNumber(res,num)
        write(*,'(A,3X,F10.3)') 'The result is:',res
    enddo
    end program fmain
C代码为:
[C] 纯文本查看 复制代码
#include <stdio.h>
extern "C" void AddNumber(double res, int num)
{
        res=res+num;
}

操作系统是64位windows 7, 编译器是vs2010+intel visual fortran XE 2013


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

10

帖子

2

主题

0

精华

入门

F 币
52 元
贡献
29 点
沙发
 楼主| 发表于 2015-11-30 18:36:22 | 显示全部楼层
pasuka 发表于 2015-11-30 18:19
修改了一下,gcc编译无问题,至于为啥这么改,ivf的帮助文档有详细的混合编程说明
首先得明白,传址、传值
...

谢谢你的解答,找了一晚上,终于找到了解决方法。
https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/326037

10

帖子

2

主题

0

精华

入门

F 币
52 元
贡献
29 点
板凳
 楼主| 发表于 2015-11-30 19:13:03 | 显示全部楼层
pasuka 发表于 2015-11-30 18:19
修改了一下,gcc编译无问题,至于为啥这么改,ivf的帮助文档有详细的混合编程说明
首先得明白,传址、传值
...

还想问你一个问题,就是bind(C,Name='')中Name表示的名字必须与C文件里的函数名一致是吗?与Fortran的函数名也必须一致还是可以不同呢?

10

帖子

2

主题

0

精华

入门

F 币
52 元
贡献
29 点
地板
 楼主| 发表于 2015-12-1 06:53:54 | 显示全部楼层
fcode 发表于 2015-11-30 19:26
与C的一致就行。不必与Fortran的函数名一致。(否则的话就没意思了,重复的名字连着写两次) ...

知道啦,谢谢~
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-12 04:14

Powered by Tencent X3.4

© 2013-2024 Tencent

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