调用Fortran函数,该函数从C ++返回派生类型的数组

时间:2015-02-06 21:09:04

标签: c++ compiler-errors makefile fortran

我有一个fortran派生类型

type, bind(c):: waveform

 real(c_double)::x 
 real(c_double)::y 

 real(c_double)::lat

 real(c_double)::windspeed !Wind speed at that point                                                                                       
 real(c_double)::a !Willougby A parameter                                                                                                  

 real(c_double)::startX
 real(c_double)::startY

 real(c_double)::data(600)

结束类型波形

我写了一个函数,它返回一个波形类型的数组

  function getWilloughby()

    type(waveform), allocatable, dimension(:)::getWilloughby

我想从C ++程序中调用Fortran函数,所以我创建了一个对应于派生类型和原型函数的结构。

  waveform *getWilloughby_();

我有点卡住了,因为根据我的理解,C ++没有按值返回数组,而且我不确定我的Makefile是否正确。

编译时,我收到以下错误。

undefined reference to `getWilloughby_()'

这是我的Makefile

 ORIG_INC_PATH = -I/usr/include
 ORIG_LAB_PATH = -L/usr/lib

 CUDA_INC_PATH = -I/usr/local/cuda-6.0/targets/x86_64-linux/include
 CUDA_LIB_PATH = -L/usr/local/cuda-6.0/targets/x86_64-linux/lib


 full:
    g++ -c cross_correlation.cpp -L/usr/local/cuda/lib64 -lcudart -lcublas -lcufft -lafcuda -o cross_correlation.o -g $(CUDA_INC_PATH) $(CUDA_LIB_PATH)

    gfortran -c load_files.f90

    g++ -o matched_filter load_files.o cross_correlation.o -L/usr/local/cuda/lib64 -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -lgfortran -lcudart-lcublas -lcufft -lafcuda $(CUDA_INC_PATH) $(CUDA_LIB_PATH)

我在C ++中声明函数是错误的吗?我是否错误地编写了Makefile?或者还有别的东西在玩吗?

0 个答案:

没有答案