在C++中引用Fortran Lapack矩阵工具

本文介绍如何在C++环境中使用Fortran编写的Lapack矩阵计算库,包括安装gfortran、liblapack-dev,定义函数原型及编写Makefile的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.sina.com.cn/s/blog_8019dfa70100uwaw.html

在C++中引用Fortran Lapack矩阵工具

(2011-10-22 11:45:07)
标签:

杂谈

分类:杂代码
前几天接了一个活,是要做一个程序,实现矩阵计算,要求是在C++中引用FortranLapack的矩阵计算工具。。。这下可把丁丁难住了。。。从来没接触过Fortran,更别说把这两个复合到一起了。。。

经过我艰苦努力的Baidu,Google,Bing,得到解决方案如下:

先apt-get install gfortran (似乎GCC也可以。。。)
再sudo apt-get install liblapack-dev


在头文件里写出如下函数原型:
extern "C"
{
extern void dgemv_(char*,int*,int*,double*,const double*,int*,constdouble*,int *,double*,double*,int*);
extern void dgesv_(int*,int*,double*,int*,int*,double*,int*,int*);
extern void dgemm_(char*,char*,int*,int*,int*,double*,constdouble*,int*,const double*,int*,double*,double*,int*);
extern void dgetrf_(int*,int*,double*,int*,int*,int*);
extern voiddgetri_(int*,double*,int*,int*,double*,int*,int*);
extern voiddgecon_(char*,int*,double*,int*,double*,double*,double*,int*,int*);
extern double dlange_(char*,int*,int*,constdouble*,int*,double*);
extern doubledsygvd_(int*,char*,char*,int*,double*,int*,double*,int*,double*,double*,int*,int*,int*,int*);
};


更重要的是写Makefile文件(题目要求是Linux环境下,所以要写Makefile):
# define variables
HDRDIR 
= ./
 
# set options for this machine
# specify which compilers to use for c and linking
CC      =g++
FC      =gfortran
LD      =g++
CXX        = g++
 
 
 
# compiler flags to be used 
CFLAGS = -I$(HDRDIR)
CXXFLAGS = -I$(HDRDIR)
FFLAGS = -I$(HDRDIR)
 
# link flags to be used 
LDFLAGS     
 
ifeq ($(DEBUG), 1)
CFLAGS += -g
CXXFLAGS += -g
FFLAGS += -g
LDFLAGS +=-g
endif
 
#libraries to be linked in
LIBS    -llapack -lm
 
# types of files we are going to construct rules for
.SUFFIXES: .c .f .cc
 
# rule for .c files
.c.o:
      $(CC)$(CFLAGS) -o $*.o -c $*.c
 
# rule for .f files
.f.o:
      $(FC)$(FFLAGS) -o $*.o -c $*.f
 
# rule for .cc files
.cc.o:
      $(CXX)$(FFLAGS) -o $*.o -c $*.cc
 
# list of objects to be compiled
OBJS      =main.o
 
main:$(OBJS) 
      $(LD)  $(LDFLAGS) -o main $(OBJS) $(LIBS)
 
# what to do if user types "make clean"
clean : 
      rm -r$(OBJS) main
 
然后就编译OK啦~~


附Lapack函数介绍:
http://www.kuaipan.cn/index.php?ac=file&oid=27793549416202242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值