Ошибка твердости: генератор кода, не пройдено, чтобы произвести деструктор C++ для класса MATLAB

Проблема

Генерация повторно используемого кода с классами 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.

Похожие темы