Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Pasos adicionales para actualizar el código fuente de Fortran

Los pasos que se indican se aplican a los archivos de origen de Fortran y C/C++.Actualice los archivos MEX para usar la API de 64 bits Fortran utiliza firmas de API similares, idénticos/tipos, y compiladores de archivos similares y depuradores.mwSizemwIndex

Sin embargo, para que su código fuente Fortran sea compatible con 64 bits, realice estas tareas adicionales.

Utilice Fortran API header file

Para hacer que su archivo Fortran MEX sea compatible con la API de 64 bits, utilice el archivo de cabecera en sus archivos de origen de Fortran.fintrf.h Asigne un nombre a los archivos de origen con una extensión de archivo mayúscula..F Para obtener más información sobre estos requisitos, consulte.Componentes de Fortran MEX File

Declare Fortran punteros

Los punteros son direcciones de 32 bits o 64 bits, según el tipo de máquina. Este requisito no está directamente ligado a las dimensiones de la matriz, pero podría surgir problemas al mover código de 32 bits a máquinas de 64 bits como parte de esta conversión.

Para obtener más información, consulte y.Macros de preprocesadormwPointer

El compilador de C/C++ controla automáticamente el tamaño del puntero. En Fortran, utiliza el tipo para controlar esta diferencia.MATLAB®mwPointerPor ejemplo, devuelve un:mxCreateDoubleMatrixmwPointer

mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag) mwSize m, n integer*4 ComplexFlag 

Exigir declaraciones de tipo Fortran

Fortran utiliza definiciones de tipos implícitas. Esto significa que las variables no declaradas que empiezan por letras a través son de tipo declarado implícitamente.ININTEGER Los nombres de variable que empiezan por otras letras son de tipo declarado implícitamente.REAL*4 El uso del tipo implícito podría funcionar para índices de 32 bits, pero no es seguro para archivos MEX de dimensión de matriz grande.INTEGER Para obligarlo a declarar todas las variables, añada la sentencia a sus subrutinas Fortran.IMPLICIT NONE Por ejemplo:

subroutine mexFunction(nlhs, plhs, nrhs, prhs) implicit none 

Esta instrucción ayuda a identificar enteros de 32 bits en el código que no tienen declaraciones de tipo explícitas. A continuación, puede declararlos como o/, según corresponda.INTEGER*4mwSizemwIndex Para obtener más información, consulte la documentación del compilador de Fortran.IMPLICIT NONE

Utilice variables en las llamadas de función

Si usa un número como argumento para una función, el compilador Fortran podría asignar al argumento un tipo incorrecto. En una plataforma de 64 bits, un tipo incorrecto puede producir errores, infracciones de segmentación o resultados incorrectos.Out of Memory Por ejemplo, las definiciones de los tipos de argumento para la función son:mxCreateDoubleMatrix

mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag) mwSize m, n integer*4 ComplexFlag

Supongamos que tiene un archivo MEX C/C++ con la siguiente instrucción:

myArray = mxCreateDoubleMatrix(2, 3, mxREAL); 

La mayoría de los compiladores de C/C++ interpretan el número como un valor de 64 bits.2 Algunos compiladores de Fortran no pueden detectar este requisito y suministrar un valor de 32 bits. Por ejemplo, una sentencia Fortran equivalente es:

myArray = mxCreateDoubleMatrix(2, 3, 0)

El compilador interpreta el valor del argumento correctamente como Type.ComplexFlag0INTEGER*4 Sin embargo, el compilador podría interpretar el argumento como un valor de 32 bits, aunque el argumento sea el tipo declarado.2mmwSize

Una solución independiente del compilador a este problema es declarar y usar una variable en lugar de un valor literal.mwSizemwIndex Por ejemplo, las siguientes sentencias llaman inequívocamente a la función en Fortran:mxCreateDoubleMatrix

mwSize nrows, ncols INTEGER*4 flag nrows = 2 ncols = 3 flag = 0 myArray = mxCreateDoubleMatrix(nrows, ncols, flag) 

Administrar advertencias de compilador de Fortran reducidas

Algunos compiladores de Fortran no pueden detectar tantas discrepancias de tipo como compiladores de C/C++ similares. Esta incapacidad puede complicar el paso dejando más problemas para encontrar con el depurador en el paso.Resolver errores y advertencias de compilación-largeArrayDimsEjecute el archivo MEX de 64 bits y compare los resultados con la versión de 32 bits

Consulte también

| |

Ejemplos relacionados

Más acerca de

Sitios web externos