Дополнительные шаги, чтобы обновить исходный код Фортрана

Шаги в файлах 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-битной Версией.

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

| |

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

Больше о

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

Была ли эта тема полезной?