环境:vs2019+Intel Parallel Studio XE 2020
1,c++调用fortran的lib动态库
(1)编写fortran动态库。
DOUBLE PRECISION FUNCTION ADD (A, B)
!DEC$ ATTRIBUTES DLLEXPORT:: ADD
DOUBLE PRECISION A, B
ADD =A + B
END
(2)编写c++程序。右键项目->添加现有项->添加lib。
如果不是通过这种方式添加lib。也可以把附加目录库指向lib目录。同时c++代码加上
#pragma comment(lib, "hwadd.lib")
(3)c++代码
#include <iostream>
#include <Windows.h>
//#pragma comment(lib, "hwadd.dll")
extern "C"
{
double ADD(double* a, double* b);
}
int main()
{
double a = 10;
double b = 1;
double sum;
sum= ADD(&a, &b);
printf("a + b = %lf\n", sum);
}
2,c++调用fortran静态库方法
(1),创建静态库工程。fortran代码为
DOUBLE PRECISION FUNCTION SADD (A, B)
DOUBLE PRECISION A, B
SADD =A + B
END
生成为lib静态库。
(2)编写c++程序。右键项目->添加现有项->添加lib。
(3)编写c++代码
#include <iostream>
#include <Windows.h>
//#pragma comment(lib, "hwadd.lib")
//#pragma comment(lib, "sadd.lib")
extern "C"
{
//double ADD(double* a, double* b);
double SADD(double* a, double* b);
}
int main()
{
double a = 10;
double b = 1;
double sum;
//sum= ADD(&a, &b);
sum= SADD(&a, &b);
printf("a + b = %lf\n", sum);
}
(3)点击生成,报错误:无法打开文件“ifconsol.lib”
(4)找到ifconsol.lib的路径
(5)右键工程->属性->链接器->常规->把ifconsol.lib所在目录添加到附加库目录中
(6)重新运行c++程序,调用成功