Генерация повторного кода с классами C++ из MATLAB® код увеличивает шансы переполнения стека во время выполнения кода. Генерация кода может остановиться и создать это сообщение:
Code generator failed to produce C++ destructor for MATLAB class 'y'. Generated code is not exception-safe. To enable generation of C++ destructor, disable 'Generate Re-entrant code (MultiInstanceCode)' configuration parameter.
Это сообщение может появиться, если оба условия верны:
Вы принимаете решение сгенерировать код С++ с классами из кода MATLAB путем установки TargetLang
на 'C++
'и CppPreserveClasses
на true
в объекте строения (coder.CodeConfig
или coder.EmbeddedCodeConfig
), или в настройках сборки проекта, путем установки Language равной C++
и установка флажка Generate C++ classes from MATLAB classes.
Вы принимаете решение сгенерировать повторный код путем включения MultiInstanceCode
параметр в объекте строения кода или путем включения параметра Generate re-entrant code на вкладке Memory приложения MATLAB Coder™.
Деструктор класса в коде MATLAB имеет постоянную переменную или вызывает другую функцию, которая объявляет и использует постоянную переменную.
В зависимости от типа кода, который вы хотите сгенерировать, попробуйте одно из следующих решений.
Можно увеличить предел стека, чтобы сгенерировать повторный код, который имеет классы C++ для классов MATLAB. Выполните одно из следующих действий:
В диалоговом окне настроек проекта под вкладкой Memory установите параметр Stack usage max.
В объекте строения для автономной генерации кода (coder.CodeConfig
или coder.EmbeddedCodeConfig
), установите StackUsageMax
параметр.
Увеличьте предел стека путем удвоения значения стека, пока генерация кода не преуспеет. Генератор кода может иметь достаточную память, чтобы сгенерировать классы C++ в повторно входящем коде.
Примечание
Максимальный предел конфигурируемого стека зависит от линкера в вашей системе. Размер стека по умолчанию варьируется в зависимости от вашей операционной системы и системных строений.
Деструктор класса в коде MATLAB не должен иметь постоянную переменную или вызвать другую функцию, которая объявляет постоянную переменную.
Чтобы сгенерировать код, который содержит классы C++ для классов MATLAB, можно отключить генерацию повторно входящего кода. Выполните одно из следующих действий:
В объекте строения кода отключите MultiInstanceCode
параметр.
В приложении MATLAB Coder отключите параметр Generate re-entrant code.
Можно изменить поведение генератора кода по умолчанию, чтобы создать структуры для классов MATLAB. Выполните одно из следующих действий:
В объекте строения для автономной генерации кода (coder.CodeConfig
или coder.EmbeddedCodeConfig
), установите TargetLang
на 'C++
'и CppPreserveClasses
на false
.
В приложении MATLAB Coder установите Language равным C++
. В настройках сборки проекта снимите флажок Generate C++ classes from MATLAB classes.