Я работаю над тем, чтобы gfortran работал вместо компилятора Intel Fortran для MATLAB в Windows 10. Стиль искажения имен в GCC, по крайней мере для gfortran, состоит в том, чтобы сделать имя символа строчными и добавить символ подчеркивания;«mxIsNumeric800» становится mxisnumeric800_.Чтобы MATLAB распознавал символы, они должны опустить добавленное подчеркивание (просто, просто добавьте -fno-underscoring
к опциям компилятора) и состоять полностью из буквенно-цифровых символов в верхнем регистре (сложно, но возможно).
I 'мы смогли решить эту проблему с использованием заглавных букв, используя метод, описанный в в этом ответе , но я не могу получить экспортированные символы в верхнем регистре.Вот экспортированные символы для mex-файла, скомпилированного с помощью gfortran (часть вывода dumpbin /exports timestwo.mexw64
):
ordinal hint RVA name
1 0 00001510 mexfilerequiredapiversion
2 1 000013E0 mexfunction
3 2 000013C0 timestwo
и того же файла, скомпилированного с помощью компилятора Intel Fortran:
ordinal hint RVA name
1 0 00001150 MEXFILEREQUIREDAPIVERSION
2 1 00001000 MEXFUNCTION
Компилятор Intel обрабатывает экспорт через опцию компоновщика /EXPORT:FOO
, которая используется дважды, один раз для MEXFUNCTION и один раз для MEXFILEREQUIREDAPIVERSION.Я попытался использовать файл .def, состоящий из
EXPORTS
MEXFUNCTION
MEXFILEREQUIREDAPIVERSION
, но его связывание (в отличие от файла .def с символами в нижнем или нижнем регистре) ничего не меняет.Я также попытался добавить в свой скрипт компоновщика:
EXTERN(MEXFUNCTION,MEXFILEREQUIREDAPIVERSION);
PROVIDE(mexfunction = MEXFUNCTION);
PROVIDE(mexfilerequiredapiversion = MEXFILEREQUIREDAPIVERSION);
, но это ничего не меняет.
Как я могу изменить эти символы в верхний регистр?