找回密码
 注册
Simdroid-非首页
查看: 53|回复: 2

C++和Fortran混合编程问题

[复制链接]
发表于 2009-4-15 10:34:14 | 显示全部楼层 |阅读模式 来自 陕西西安
近期在做 C++和Fortran混合编程问题,遇到几个问题,请大家不吝赐教。

1 我用linux系统 编译工具是pgCC 和pgf90 7.0-2
这是我写的makefile文件
compilerC = pgCC -pgf90libs
compilerF = pgf90
Roc:c1.o f1.o
$(compilerC) -o Roc *.o
c1.o:c1.cpp
$(compilerC) -c c1.cpp
f1.o:f1.90
$(compilerF) -c f1.f90
编译总是通不过,说__a__a1()和__a__x没有定义,不明白why?
2 如果f1.f90中含有TYPE 那么C++如何调用f1.f90中TYPE里面的函数和变量呢?
希望能够得到您的帮助,非常感谢


很高兴看到您的内容,表示感谢。
我有三个问题:
1 我用linux系统 编译工具是pgCC 和pgf90 7.0-2
以下是我的源文件和makefile文件
********
f1.f90
********
Moudule A
  INTEGER::X
  TYPE PUBLIC::ROCFRAC_GLOBAL
     INTEGER::io_input
     INTEGER::io_sum
  END TYPE ROCFRAC_GLOBAL
  contains
  SUBROUTINE a1()
     TYPE(ROCFRAC_GLOBAL)::glb
     glb%io_input=10
     x=1
  END SUBROUTINE a1()
END Moudule A

********
c1.cpp
********
#include<iostream>
using namespace std;
#ifdef __cplusplus
extern "C"{
#endif
extern int __a_MOD_x
extern void __a_MOD_a1()
extern struct {int io_input;
               int io_sum
              }__a_MOD_rocfrac_global;
#ifdef __cplusplus
}
endif
int main()
{
  __a_MOD_a1();
  cout<<__a_MOD_x<<endl;
  return(0);
}

********
makefile
********
compilerC = pgCC -pgf90libs
compilerF = pgf90
Roc:c1.o f1.o
$(compilerC) -o Roc *.o
c1.o:c1.cpp
$(compilerC) -c c1.cpp
f1.o:f1.90
$(compilerF) -c f1.f90
编译总是通不过,说__a_MOD_x和__a_MOD_a1()没有定义,不明白why?
2 如果f1.f90中含有TYPE 那么C++如何调用f1.f90中TYPE里面的函数和变量呢?

3 如何才能看到Fortran 的.o文件 在里面查找子程序名和函数名呢?

希望能够得到您的帮助,非常感谢
发表于 2009-4-15 15:09:22 | 显示全部楼层 来自 大连理工大学
Simdroid开发平台
没有做过混合编程,搂住可以论坛搜索一下。
回复 不支持

使用道具 举报

发表于 2009-4-15 22:47:18 | 显示全部楼层 来自 重庆
建议下载个比较新的编译器,如GNU  INTEL   SUN   这些都支持ISO_C_BINDING 这个fortran2003内部模块,和C混编会非常方便,具体用法参看fortran 2003  handbook
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 11:37 , Processed in 0.032467 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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