Идентификатор ошибки IntelliSense «emlrtStack» не определен

0

Я преобразовываю написанную функцию MATLAB в C с помощью "Matlab coder". После получения преобразованных файлов преобразованная функция всегда имеет первый входной аргумент как const emlrtStack *sp. Теперь, когда я пытаюсь проверить его на VC++ 2013, IntelliSense дает упомянутую выше ошибку.

Я вручную попытался найти этот идентификатор в файле emlrt.h но такой вещи там нет. Я попытался преобразовать простую функцию умножения с двумя входными аргументами [например, c = mul (a, b) ], но все же преобразованная функция имеет дополнительный аргумент внутри функции в дополнение к a и b. (что означает, что этот аргумент не зависит от функции).

Если у кого-то есть решение или возникли такие проблемы, пожалуйста, поделитесь или помогите.

Более того, если кто-то знает, как просто протестировать эти преобразованные функции, это будет очень ценная дополнительная помощь.

Теги:
visual-c++
matlab-coder

1 ответ

1
Лучший ответ

Вероятно, код, который был сгенерирован для функции MEX, а не для отдельной цели. Функции MEX представляют собой исполняемые файлы C, C++ или Fortran, которые могут быть вызваны как обычная функция MATLAB. Генерирование кода для создания функции MEX допускает две вещи. Во-первых, вы можете протестировать свой сгенерированный код в MATLAB, потому что вы можете вызывать функцию MEX из MATLAB, как и любую другую функцию. Найдите файл с именем mul_mex.mex* после генерации кода и попробуйте назвать его: mul_mex(1,2). Другое использование для генерации функции MEX состоит в том, что она часто может быть быстрее, чем код MATLAB, из которого он был сгенерирован. Функции MEX используются только в контексте MATLAB.

Параметр emlrtStack* который вы видели, появляется в сгенерированном коде MEX, чтобы помочь в отчетах об ошибках во время выполнения. Он отсутствует в автономном коде, который предназначен для запуска за пределами MATLAB.

Если вы хотите использовать сгенерированный код в Visual Studio или вне MATLAB, вы должны выбрать одну из автономных целей - LIB, DLL или EXE. На этой странице показано, как изменить тип вывода. Подводя итог, если вы используете командную строку, вы можете сказать:

cfg = coder.config('lib'); %or 'dll' or 'exe'
codegen mul -config cfg -args {1,2}

При использовании интерфейса проекта вы нажимаете на вкладку " Build " и выбираете статическую библиотеку или общую библиотеку в раскрывающемся меню "Тип вывода".

Я бы рекомендовал прочитать этот пример, демонстрирующий, как использовать сгенерированную DLL в Visual Studio.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню