2015-02-01 6 views
1

Я начинаю использовать настройку mex для вызова файлов fortran из Matlab. То, что я пытаюсь сделать, это вызвать подпрограмму fortran внутри m-файла. Из того, что я прочитал, мне нужно запустить:Beginner's Mex Error - MatLab

mex filename.f90

Однако, когда я делаю это, я получаю много сообщений об ошибках типа:

error #5149: Illegal 
character in statement label field [s] 

Однако, я использую файл .f90, который предположительно правильный (я получил его из другого источника). Вот первые строки, начинающиеся фортрановской файла:

subroutine mexFunction(nlhs,plhs,nrhs,prhs) 
!-------------------------------------------------------------------- 
! Matlab gateway for sirff 

implicit none 

! pointers to input/output data 
! always take INTEGER*8, to let it work on 64-bit machines (SGI e.g.) 
! 32-bit compilers will correct this to INTEGER*4, so don't worry about the 
! warning(s) on this during compilation. 
integer(8) :: plhs(*), prhs(*) 

Я новичок в этом, так что медведь со мной, пожалуйста. Любая помощь приветствуется.

+0

Подобная ошибка предполагает, что компилятор ожидает источник фиксированной формы (независимо от суффикса имени файла). Можно ли показать вызовы компилятора или параметры настройки? – francescalus

+0

Как я могу это сделать? – user191919

+0

Лучшее место может быть файлом mexopts, но, боюсь, для меня все это немного туманно. [Кто-то более опытный может быть больше помощи.] – francescalus

ответ

2

Сообщение об ошибке, которое вы видите, находится в компиляторе Intel. Ваш файл Fortran mex обрабатывается как форматированный фиксированный формат независимо от того, что вы используете расширение файла .f90 (что традиционно означает, что источник является свободным форматом). Вы можете легко воссоздать ошибку только с ifort себя:

> ifort -fixed filename.f90 
filename.f90(1): error #5149: Illegal character in statement label field [s] 
subroutine mexFunction(nlhs,plhs,nrhs,prhs) 
^ 

Вы говорите, что вы переименовали filename.f90 в filename.f, но это не делает ничего, чтобы изменить формат источника (от свободно фиксированы), поэтому ошибка не будет устранена. Wikibooks описывает here как сделать файл в фиксированном формате. Хорошее эмпирическое правило заключается в том, чтобы отложить каждую строку с 6 пробелами и изменить комментарий ! символов на C s. Это должно сделать ваш вызов mex успешным.

Если вы хотите продолжить использовать источник в свободном формате, вам нужно будет изменить свои параметры mex, чтобы это разрешить. Страница MathWorks (Великобритания) для mex: http://uk.mathworks.com/help/matlab/ref/mex.html.

+0

Другой человек, которого я предложил, удаляет параметр/fixed format в mexopts. Вот что мои COMPFLAGS читают: 'COMPFLAGS ="/nologo/fpp/Qprec/MD/fp: source/предполагать: bscc $ INCLUDE $ COMPDEFINES "' Однако он по-прежнему не работает ... Как мне указать для сбор свободной формы? – user191919

+0

Руководство Intel для этого - https://software.intel.com/en-us/node/525129. Перефразировать «ОС Windows:/бесплатно.» Исходные файлы находятся в свободном формате. По умолчанию: Формат исходного файла определяется из расширения файла: файлы с расширением .f90, .F90 или .i90 являются файлами исходного формата ; файлы с расширением .f, .for, .FOR, .ftn или .i - файлы с фиксированным форматом.« – MatCross

+0

Мне удалось решить проблему: на самом деле все, что мне нужно, было удалить/зафиксировать из флагов компилятора. Я пробовал это. Однако используемый мною компилятор MatLab находился внутри скрытой папки, которую я не изменил. – user191919