主要内容

升级Fortran MEX文件以使用64位API

步骤升级MEX文件以使用64位API适用于Fortran和C / C ++源文件。Fortran使用类似的API签名,相同MWSIZE./mwindex.类型和类似的编译器和调试器。

但是,要使您的Fortran源代码64位兼容,请执行这些附加任务。

使用Fortran API标题文件

要使您的Fortran MEX文件与64位API兼容,请使用FINTRF.H.Fortran源文件中的标题文件。使用大写命名您的源文件。F文件扩展名。有关这些要求的更多信息,请参阅Fortran MEX文件的组件

声明Fortran指针

指针是32位或64位地址,基于机器类型。此要求与数组维度没有直接相关联,但是当将32位代码移动到64位机器时,您可能会遇到问题作为此转换的一部分。

有关更多信息,请参阅预处理器宏MWPointer.

C / C ++编译器自动处理指针大小。在Fortran,Matlab®用来MWPointer.类型以处理这种差异。例如,mxcreatedoublematrix.返回A.MWPointer.

mwpointer mxcreatedoublembatrix(m,n,complexflag)mwsize m,n整数* 4 complexflag

需要Fortran类型声明

Fortran使用隐式类型定义。未申报的变量以字母开始一世通过N隐式声明类型整数。以其他字母开头的变量名称是隐式声明的类型真的* 4.。使用隐式整数类型可以为32位指数工作,但对于大型阵列维度MEX文件并不安全。要强制您声明所有变量,请添加隐含无对您的Fortran子程序的声明。例如:

子程序mexfunction(nlhs,plhs,nrhs,prhs)隐含无

此语句有助于识别不具有显式类型声明的代码中的32位整数。然后,您可以将它们声明为整数* 4.或者MWSIZE./mwindex., 作为适当的。有关的更多信息隐含无,请参阅您的Fortran编译器文档。

在函数调用中使用变量

如果将数字用作函数的参数,则您的Fortran编译器可能会为参数分配不正确的类型。在64位平台上,可以产生不正确的类型内存不足错误,分段违规或不正确的结果。例如,参数类型的定义mxcreatedoublematrix.功能是:

mwpointer mxcreatedoublembatrix(m,n,complexflag)mwsize m,n整数* 4 complexflag

假设您具有带有以下语句的C / C ++ MEX文件:

myArray = mxcreatedoublematix(2,3,mxreal);

大多数C / C ++编译器解释数字2作为64位值。一些Fortran编译器无法检测到此要求,并提供32位值。例如,等效的fortran语句是:

myArray = mxcreatedoublematrix(2,3,0)

编译器解释了价值复杂氟争论0.正确的类型整数* 4.。但是,编译器可以解释参数2作为32位值,即使是争论m被声明类型MWSIZE.

对此问题的编译器独立的解决方案是宣布和使用MWSIZE./mwindex.变量而不是文字值。例如,以下陈述明确拨打电话mxcreatedoublematrix.Fortran的功能:

MWSIZE nrows,ncls整数* 4标志nrows = 2 ncols = 3 flag = 0 myArray = mxcreatedoublematrix(nrows,ncols,flag)

管理减少的Fortran编译器警告

某些Fortran编译器无法检测到与类似C / C ++编译器一样多的类型不匹配。这种无法使阶梯复杂化解决-largearraydims构建故障和警告通过在步骤中留下更多问题来查找您的调试器执行64位MEX文件并使用32位版本进行比较结果

也可以看看

||

相关例子

更多关于

外部网站