http://blog.sina.com.cn/s/blog_8019dfa70100uwaw.html
前几天接了一个活,是要做一个程序,实现矩阵计算,要求是在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
FC
LD
CXX
# 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
# types of files we are going to construct rules for
.SUFFIXES: .c .f .cc
# rule for .c files
.c.o:
# rule for .f files
.f.o:
# rule for .cc files
.cc.o:
# list of objects to be compiled
OBJS
main:$(OBJS)
# what to do if user types "make clean"
clean :
然后就编译OK啦~~
附Lapack函数介绍:
http://www.kuaipan.cn/index.php?ac=file&oid=27793549416202242