2016-12-08 4 views
1

Мне нужно вызвать некоторый код Fortran из MATLAB. Я провел некоторое исследование и прочитал о команде mex и о том, как ее использовать. К сожалению, я уже не могу заставить компилятор Fortran работать.MATLAB mex не ищет компилятор gfortran на macOS

Прежде всего, вот моя установка:

  • Macos Sierra 10.12.1 (последняя версия)
  • MATLAB R2016b (последняя версия)
  • gfortran 4.9.2 (устанавливается с помощью DMG-с официальной сайт GNU)

Согласно документации MATLAB, я могу использовать mex -setup FORTRAN подготовить mex для построения MEX-файл из Fortran. Однако, выполнив команду в расширенном режиме дает следующий результат: mex -setup -v FORTRAN

Verbose mode is on. 
... Looking for compiler 'Intel Fortran Composer XE' ... 
... Looking for environment variable 'IFORT_COMPILER16' ...No. 
... Looking for environment variable 'IFORT_COMPILER15' ...No. 
... Looking for environment variable 'IFORT_COMPILER14' ...No. 
... Looking for environment variable 'IFORT_COMPILER13' ...No. 
... Executing command 'which ifort' ...No. 
Did not find installed compiler 'Intel Fortran Composer XE'. 
Error using mex 
No supported compiler or SDK was found. For options, visit 
http://www.mathworks.com/support/compilers/R2016b/maci64.html. 

link Следуя, можно увидеть, что MATLAB делает поддержку GNU gfortran 4.9.x на Linux. Однако на Mac перечислены только коммерческие компиляторы Intel. Это то, что ищет mex.

Поскольку Mac также может использовать gfortran для компиляции кода Fortran, я думал, что можно будет заставить его работать с MATLAB. Я также много искал в googled и нашел такие вопросы, как this one на форуме MathWorks, который предполагает, что MATLAB должен иметь возможность использовать gfortran, даже на Mac.

Вот что я думаю странно, мой MATLAB даже не ищет компилятор gfortran. Все, что он делает - это искать компилятор Intel, не может найти его, а затем выдает указанное выше сообщение об ошибке.

Что касается моего gfortran установки. Это определенно 4.9.2 (который указан как поддерживаемый в Linux), which gfortran возвращает /usr/local/bin, и я могу успешно скомпилировать программы через Terminal.

Кстати, mex -setup ANY успешно перечисляет компиляторы для C и C++, но не Fortran.

MEX configured to use 'Xcode with Clang' for C language compilation. 
Warning: The MATLAB C and Fortran API has changed to support MATLAB 
variables with more than 2^32-1 elements. In the near future 
you will be required to update your code to utilize the 
new API. You can find more information about this at: 
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html. 
MEX configured to use 'Xcode Clang++' for C++ language compilation. 
Warning: The MATLAB C and Fortran API has changed to support MATLAB 
variables with more than 2^32-1 elements. In the near future 
you will be required to update your code to utilize the 
new API. You can find more information about this at: 
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html. 

To choose a different C compiler, select one from the following: 
Xcode with Clang mex -setup:'/Users/Lennart/Library/Application Support/MathWorks/MATLAB/R2016b/mex_C_maci64.xml' C 
Xcode Clang++ mex -setup:'/Users/Lennart/Library/Application Support/MathWorks/MATLAB/R2016b/mex_C++_maci64.xml' 

я также имел взглянуть на эти .xml файлы, упомянутые в самом конце последнего выхода. Не было никакого файла для чего-либо связанного с Fortran, и я не смог успешно написать его сам. Я даже не уверен, что это проблема ...

Так просто поставил мой вопрос: как я могу получить MATLAB на самом деле, а потом, конечно, также найти компилятор gfortran, чтобы использовать его для компиляции файлов mex?

Цените свою помощь!

ответ

2

Благодаря hsuyaa и предоставленной ссылке я смог решить свою проблему. Поскольку мне нужно было еще немного экспериментировать, я хотел бы сообщить, как именно я смог заставить gfortran работать.

Посмотрите на this link и принятый ответ.Хотя команда MathWorks четко заявляет, что инструкции специально написаны для xCode 7.0 и MATLAB R2015b, я получил все, чтобы работать с xCode 8.1, MATLAB R2016b и macOS Sierra 10.12.

MATLAB, похоже, хранит данные конфигурации компилятора в .xml-файлах, как упоминалось ранее. Вы можете найти каталог в MATLAB, введя

cd(fullfile(matlabroot, 'bin', 'maci64', 'mexopts')); 

я выполнить новую установку MATLAB и раньше, но в этом месте, только три файла, где расположены, один для Clang, один для Clang ++, один для компании Intel Fortran. Gfortran просто отсутствовал.

Автор решения в MathWorks приложил все эти .xml-файлы к своему сообщению. Я загрузил файлы и скопировал gfortran.xml в вышеупомянутую папку. Это обеспечило частичный успех в том, что MATLAB фактически искал gfortran при запуске mex setup.

Однако, поскольку файлы не обновлены, мне пришлось добавить несколько строк. Я не совсем понимаю, как работают файлы конфигурации, но я заметил, что некоторые строки ссылаются на старые версии macOS. Скачать файл gfortran.xml за ссылку выше и добавьте следующее:

Где вы видите

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk" /> 

или

<cmdReturns name="find $$ -name MacOSX10.11.sdk" /> 

добавить

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk" /> 

или

<cmdReturns name="find $$ -name MacOSX10.12.sdk" /> 

macOS 10.12 is Sierra. Сохранение файла и запуск mex -setup FORTRAN снова успешно идентифицировали gfortran и установили его как fortran-компилятор для mex.

-1

Ваша версия matlab не может обнаружить поддерживаемые компиляторы. Может быть, это может помочь Link.

+0

У вас может быть правильное решение, но вы должны как-то описать это в своем ответе. Многие люди действительно ненавидят ответы, подобные этому, и уменьшают их. См. Например, http://meta.stackoverflow.com/questions/265552/when-to-flag-an-answer-as-not-an-answer –

Смежные вопросы