混合编程c++与Fortran.docx
- 文档编号:7616033
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:5
- 大小:694.44KB
混合编程c++与Fortran.docx
《混合编程c++与Fortran.docx》由会员分享,可在线阅读,更多相关《混合编程c++与Fortran.docx(5页珍藏版)》请在冰豆网上搜索。
混合编程c++与Fortran
1.VS2008+INTELfortran.
Fortran为主程序,调用c++函数
2.VS2008的设置
(1)在已有的fortran工程的解决方案中添加新的c++工程:
解决方案可以有好多工程;
但是每个工程只能是单独计算机语言的工程,即fortran用fortran建立工程,c++用c++建立工程。
设置解决方案中,各个工程之间的依赖关系。
(2)混合编程的几种方法:
c++源文件编译为目标文件与fortran链接合成;
c++源文件编译为库文件,然后fortran链接的时候将该库加入。
2.设置runtimelibrary:
Multithreaded;
而debug模式中,runtimelibrary竟然是:
MultithreadedDLL
而且有时,出错的时候交换Multithread和MultithreadedDLL竟然能链接通过。
3.设置项目依赖关系:
项目-》项目依赖项
3)链接选项(以c++为静态链接库为例)
(1)构建或改变c++工程为静态链接库,如下图
(2)在主工程(fortran工程),需要设置比较多:
设置linker里面附加库(additionarylibrary)的目录和库名称
linker-》additionayLibrarydirectory设置为:
F:
\LBM_MOVING_INTER2_FLEXIBLE\LBM_MOVING_INTER2_FLEXIBLE\Release(c++编译为静态库,库所在的目录)\
设置附加库的名称:
F:
\LBM_MOVING_INTER2_FLEXIBLE\LBM_MOVING_INTER2_FLEXIBLE\Release\beamcpp.lib
linker-》input-》addtionarydependencies:
F:
\LBM_MOVING_INTER2_FLEXIBLE\LBM_MOVING_INTER2_FLEXIBLE\Release\beamcpp.lib
4)源程序c++函数的fortran接口
fortran为主程序,即
programmain
{
implicitnone
int:
:
i,j
doubleprecision,dimension(20):
:
p
.....
callGETBEAMDV(i,j,p...)
}
c++程序中
#include
#include
#include
#include
classmyclass{
...
};
extern"C"
{
voidGETBEAMDV(int*,int*,double*);
}
voidGETBEAMDV(int*MM,int*kk,double*Pld)
{
.....
return;
};
几点注意:
(1)ifort编译后(fortran源程序),其函数名为大写名称前方加底横线:
如“_GETBEAMDV”
(2)VISUALC++编译后(c++源程序),其函数名也为大写名称前方加底横线:
如“_GETBEAMDV”
因此,只需相同名称就可以了,比codeblock简单些!
!
!
另外,为了使程序在codeblocks和vs2008一致,可在vs2008中进行设置,包括c++和fortran工程中添加编译和链接选项分别为:
简单在vs2008的fortran工程中添加编译选项:
/names:
lowercase
这样的话只要增加“_”
callgetbeamdv(i,j,p...)!
!
getbeamdv_((i,j,p...))用于intelfortran编译(编译选项添加/names:
lowercase,具体参见vs2008+ifort)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 混合 编程 c+ Fortran