Как использовать компилятор C++ с помощью инструмента компиляции Matlab Mex

Я пытаюсь создать пакет исходного кода, содержащий файлы m и исходные файлы С++ (cpp) в Matlab.

В исходной папке есть простой скрипт Matlab для компиляции всех файлов cpp в одну папку:

function compileDir_simple(Cdir)
if nargin<1
    Cdir=pwd;
end

files = dir(fullfile(Cdir,'*.cpp'));

oldDir=pwd;
cd(Cdir);
for j=1:length(files)
    try
        cm = sprintf('mex -largeArrayDims %s',files(j).name);
        disp(cm);
        eval(cm);
catch
    disp(lasterr);
    disp('IGNORE if the file is a C++ file which is not a mex file (ie without a     mexFunction inside)');
    end
end

cd(oldDir);

Внутри он использует «mex -largeArrayDims». Однако моя проблема заключается в том, что когда я оцениваю этот оператор, Matlab пытается создать выбранные файлы с помощью компилятора C, который содержится в самом MATLAB. Когда я вызываю mex -setup, я вижу:

mex -setup Пожалуйста, выберите компилятор для создания файлов внешнего интерфейса (MEX):

Would you like mex to locate installed compilers [y]/n? y

Select a compiler: 
[1] Lcc-win32 C 2.4.1 in D:\MATLAB\R2010a\sys\lcc 

[0] None 

Compiler: 

Я установил компилятор Bloodshed C++ и добавил его папку bin ( в переменные Windows Environment, но все равно не вижу своего компилятора C++ в списке установленных компиляторов. Появляется только Lcc-win32. Будет уместно сказать, что это мой первый опыт при компиляции mex-файлов.


person fercis    schedule 15.04.2014    source источник
comment
Я не хотел устанавливать Visual Studio C++ (больше времени на загрузку + потребность в памяти) и искать более простой и быстрый способ компиляции C++, а единственным другим компилятором C++ для Windows был Dev C++. Ответ правильный, это не поддерживаемый компилятор для MATLAB   -  person fercis    schedule 15.04.2014


Ответы (2)


MEX-файл в Windows — это просто DLL, которая экспортирует функцию с именем mexFunction. В принципе, вы можете скомпилировать mex-файлы с помощью любого компилятора, который может создавать Windows DLL.

Однако, чтобы сделать это с помощью функции mex в MATLAB, требуется, чтобы MATLAB знал о вашем компиляторе. И по умолчанию MATLAB знает только об ограниченном количестве компиляторов. Выбранный вами компилятор не является одним из них.

Кровопролитие основано на mingw. Это означает, что вы должны иметь возможность использовать проект Gnumex для создания файла mexopts.bat для использования с вашим компилятором.

Тем не менее, я бы немного скептически отнесся к использованию Bloodshed здесь. Это C++ IDE, и я не уверен, что вам это особенно нужно. Я подозреваю, что все, что вы ищете, это компилятор. В этом случае вам, вероятно, лучше всего будет установить простой mingw.

person David Heffernan    schedule 15.04.2014

Bloodshed C++ не поддерживается компилятором. Проверьте http://www.mathworks.co.uk/support/compilers/R2014a/index.html для списка поддерживаемых компиляторов. Более старые выпуски доступны на той же странице.

person am304    schedule 15.04.2014
comment
mex-файлы - это просто библиотеки DLL. Практически любой компилятор Windows может создать mex-файл. Даже не нужно писать на C. - person David Heffernan; 15.04.2014
comment
@DavidHeffernan Что ж, если вы хотите запустить команду mex в MATLAB, вам нужно сначала запустить mex -setup, для чего требуется поддерживаемый компилятор. - person am304; 15.04.2014
comment
Это совсем не так. Вы можете использовать почти любой компилятор C с mex. Например: gnumex.sourceforge.net/documentation.html - person David Heffernan; 15.04.2014
comment
@DavidHeffernan Хорошо, хорошо, но это не задокументировано / не рекомендовано MathWorks. Я говорил о следующих одобренных/поддерживаемых/документированных компиляторах Mathworks. Достаточно сложно установить, настроить и правильно работать один из них (для обычного пользователя) без необходимости искать дополнительные проблемы, используя что-то неподдерживаемое/недокументированное. - person am304; 15.04.2014
comment
Я согласен с этим. Я просто хотел развеять любое возможное представление о том, что можно использовать только поддерживаемые компиляторы. - person David Heffernan; 15.04.2014