Идентификатор ошибки IntelliSense & quot; emlrtStack & quot; не определено

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

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

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

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

0

Решение

Вполне вероятно, что код, который был создан для 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.

1

Другие решения


По вопросам рекламы [email protected]