Шаги в Upgrade MEX Files to Use 64-Bit API применяются к исходным файлам Фортран и C/C + +. Фортран использует похожие сигнатуры API, идентичные mwSize / mwIndex типы и подобные компиляторы и отладчики.
Однако, чтобы сделать исходный код Фортран 64-разрядным, выполните эти дополнительные задачи.
Чтобы сделать ваш файл MEX на языке Фортран совместимым с 64-битным API, используйте fintrf.h заголовочный файл в исходных файлах ФОРТРАН. Назовите свои исходные файлы заглавной точкой .F расширение файла. Дополнительные сведения об этих требованиях см. в разделе Компоненты файла MEX на языке Фортран.
Указатели представляют собой 32-разрядные или 64-разрядные адреса на основе типа машины. Это требование не связано непосредственно с измерениями массива, но вы можете столкнуться с проблемами при перемещении 32-битного кода на 64-битные машины в рамках этого преобразования.
Для получения дополнительной информации см. Preprocessor Macros и mwPointer.
Компилятор C/C + + автоматически обрабатывает размер указателя. На языке Фортран, MATLAB® использует mwPointer тип, чтобы обработать это различие. Для примера, mxCreateDoubleMatrix возвращает mwPointer:
mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag) mwSize m, n integer*4 ComplexFlag
В ФОРТРАН используются неявные определения типов. Необъявленные переменные, начинающиеся с букв I через N неявно объявленные типы INTEGER. Имена переменных, начинающиеся с других букв, неявно объявлены как тип REAL*4. Использование неявного INTEGER type может работать для 32-битных индексов, но не безопасен для больших измерений массива Файлов MEX. Чтобы заставить вас объявить все переменные, добавьте IMPLICIT NONE заявление на ваши стандартные подпрограммы ФОРТРАН. Для примера:
subroutine mexFunction(nlhs, plhs, nrhs, prhs) implicit none
Этот оператор помогает идентифицировать 32-битные целые числа в коде, которые не имеют явных объявлений типов. Затем можно объявить их как INTEGER*4 или mwSize / mwIndexПо обстоятельствам. Для получения дополнительной информации о IMPLICIT NONEсм. документацию компилятора Фортран.
Если вы используете число в качестве аргумента функции, компилятор Фортран может назначить аргументу неправильный тип. На 64-разрядной платформе неправильный тип может привести к Out of Memory ошибки, нарушения сегментации или неправильные результаты. Для примера, определения типов аргументов для mxCreateDoubleMatrix функции:
mwPointer mxCreateDoubleMatrix(m, n, ComplexFlag) mwSize m, n integer*4 ComplexFlag
Предположим, что у вас есть файл MEX на C/C + + со следующим оператором:
myArray = mxCreateDoubleMatrix(2, 3, mxREAL);
Большинство компиляторов C/C + + интерпретируют число 2 как 64-разрядное значение. Некоторые компиляторы ФОРТРАН не могут обнаружить это требование и предоставить 32-битное значение. Для примера эквивалентный оператор Фортран:
myArray = mxCreateDoubleMatrix(2, 3, 0)
Компилятор интерпретирует значение ComplexFlag аргумент 0 правильно как тип INTEGER*4. Однако компилятор мог интерпретировать аргумент 2 в виде 32-битного значения, хотя аргумент и m объявлен тип mwSize.
Независимое от компилятора решение этой задачи состоит в том, чтобы объявить и использовать mwSize / mwIndex переменная вместо буквального значения. Например, следующие операторы однозначно вызывают mxCreateDoubleMatrix функция на языке Фортран:
mwSize nrows, ncols INTEGER*4 flag nrows = 2 ncols = 3 flag = 0 myArray = mxCreateDoubleMatrix(nrows, ncols, flag)
Некоторые компиляторы ФОРТРАН не могут обнаружить столько несоответствий типов, сколько аналогичные компиляторы C/C + +. Эта невозможность может усложнить шаг Устранение отказов и предупреждений сборки -largeArrayDims, оставив больше проблем для поиска с отладчиком на шаге Выполнение 64-Bit файла MEX и Сравнение результатов с 32-Bit версией.