Обновите Файлы MEX на языке ФОРТРАН, чтобы использовать 64-битный API

Шаги в файлах MEX Обновления, чтобы Использовать 64-битный API применяются к исходным файлам Фортрана и C/C++. Фортран использует подобные подписи API, идентичный mwSize / mwIndex типы, и подобные компиляторы и отладчики.

Однако, чтобы сделать ваш исходный код Фортрана 64-битным совместимый, выполните эти дополнительные задачи.

Использование заголовочного файла API Фортрана

Чтобы сделать ваш файл MEX Фортрана совместимым с 64-битным API, используйте fintrf.h заголовочный файл в ваших исходных файлах Фортрана. Назовите свои исходные файлы с прописным .F расширение файла. Для получения дополнительной информации об этих требованиях, смотрите Компоненты файла MEX на языке Фортран.

Объявление указателей Фортрана

Указатели являются 32-битными или 64-битными адресами, на основе типа машины. Это требование непосредственно не связывается к измерениям массива, но вы могли столкнуться с проблемами при перемещении 32-битного кода в 64-битные машины как часть этого преобразования.

Для получения дополнительной информации смотрите Макросы Препроцессора и mwPointer.

Компилятор C/C++ автоматически обрабатывает размер указателя. На Фортране MATLAB® использует mwPointer введите, чтобы обработать это различие. Например, mxCreateDoubleMatrix возвращает mwPointer:

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

Требование описаний типа Фортрана

Фортран использует неявные определения типа. Необъявленные переменные, начинающиеся с букв I через N неявно объявляются вводят INTEGER. Имена переменных, начинающиеся с других букв, неявно объявляются, вводят REAL*4. Используя неявный INTEGER тип мог работать на 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-битное значение. Например, эквивалентный оператор Fortran:

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-битный файл MEX и Сравнивают Результаты с 32-битной Версией.

Смотрите также

| |

Связанные примеры

Больше о

Внешние веб-сайты