大家好,在下fortran新手一枚.很冒昧的想请教一个fortran的问题。 概括来说是从fortran中调用c函数的问题。我的开发环境是VS2013+Intel fortran。我想在fortran中调用cublas库(Nvidia的一个使用GPU进行矩阵运算的c语言库,不知道怎么做。
一般来说我们可以在fortran中定义如下的interface来调用c函数: Interface integer function c_test( m ) BIND (C, NAME="Test") use iso_c_binding integer :: m end function end interface
而cublas官方提供了interface来给fortran调用c函数,但是interface被定义在c文件中,例如fortran.c。如下: typedef size_t devptr_t;
#if defined(__cplusplus) extern "C" { #endif /* __cplusplus */ int CUBLAS_INIT (void); int CUBLAS_SHUTDOWN (void); int CUBLAS_ALLOC (const int *n, const int *elemSize, devptr_t *devicePtr); int CUBLAS_FREE (const devptr_t *devicePtr); .... .... .... #if defined(__cplusplus) } #endif /* __cplusplus */
我在网上没有找到相关的知识,我想问的是 (1)是否从fortran调用c函数的时候,interface可以使用iso_c_binding的方法定义在 .f90文件中,也可以被定义在 .c文件中? (2)像cublas这样把interface定义在 .c文件中,在vs2013中该如何实现呢,( Linux下生成.o文件,混合编译很简单,但是boss说必须要用windows)。我比较困惑该如何进行下去,您能告诉我该用什么方法么, 是vs下混合编译么
Thanks in advance
祝您工作顺利!
|