Main Content

コンパイラの問題のトラブルシューティング

コンパイラ バージョンの不一致エラー

説明

ビルド プロセスはコンパイラ バージョンの不一致エラーを生成します。

アクション

  1. サポート対象で互換性のあるコンパイラの一覧を www.mathworks.com/support/compilers/current_release/ で確認します。

  2. コンパイラをアップグレードまたは変更します。詳細については、コンパイラの選択と構成を参照してください。

  3. モデルをリビルドします。

モデル シミュレーションとプログラム実行の結果が異なる

説明

モデルに対して生成されたプログラムからモデル シミュレーション結果と異なる結果が生成されます。生成されたソース コードには符号付き整数のオーバーフローを生成する算術演算が含まれます。コンパイラが、符号付き整数のオーバーフロー状態でラップ動作を実装しない可能性があります。あるいは、ラップ動作をサポートするコンパイラを使用している場合、-fwrapv オプションを使用するようにコンパイラを設定していない可能性があります。

詳細については、「Code Generator Relies on Undefined Behavior of C Language for Integer Overflows」を参照してください。

アクション

  • コンパイラがラップ動作を強制できる場合は、オンにする。たとえば、gcc コンパイラまたは gcc ベースのコンパイラ (MinGW など) の場合、コンパイラ オプション -fwrapv を指定します。

  • 整数のオーバーフローを確認するコンパイラを選択する。

  • Embedded Coder® を使用している場合、符号付き整数に生成されたコードを置換するコード置換ライブラリを開発して適用する。

予想どおりのコードの生成と予期しない結果の生成

説明

ビルド プロセスでは予想どおりのソース コードが生成されますが、実行可能プログラムでは予期しない結果が生成されます。生成されたソース コードは予想どおりに表示されます。しかし、実行可能プログラムでは予期しない結果が生成されます。

アクション

次のいずれかを行います。

  • コンパイラの最適化レベルを下げます。

    1. [コンパイラ最適化レベル] コンフィギュレーション パラメーターを [カスタム] に設定します。

    2. [カスタム コンパイラ最適化フラグ] フィールドで、最適化レベルを低く指定します。

    3. モデルをリビルドします。

  • コンパイラの最適化を無効にします。

    1. [コンパイラ最適化レベル][最適化オフ (高速にビルド)] に設定します。

    2. モデルをリビルドします。

詳細については、コンパイラの最適化の制御およびコンパイラのドキュメンテーションを参照してください。

コンパイル時の問題

問題アクション

コンパイラ構成にエラーが存在します。

使用するコンパイラとバージョンが MATLAB® でサポートされていることを確認してください。現在サポートされており、互換性があるコンパイラの一覧については、www.mathworks.com/support/compilers/current_release/ を参照してください。必要に応じて、コンパイラをアップグレードまたは変更してください (コンパイラの選択と構成またはコンパイラの選択と構成を参照)。

環境変数が make ユーティリティ、コンパイラまたはリンカーに誤って設定されています。たとえば、Cygwin ツールを Windows プラットフォームにインストールすると、他のコンパイラで使用中の環境変数にも影響が出ます。

Windows プラットフォームで set コマンド、または Linux® プラットフォームで setenv コマンドを使用して、システムの環境変数設定を確認してください。使用しているツールの要件と設定が一致していることを確認してください。

S-Function ブロックとして指定されたカスタム コード、または [カスタム コード] にエラーが存在します。たとえば、コードがコンパイラで見つけることのできないヘッダー ファイルを参照しています。

問題の原因を切り分けるには、カスタム コードをモデルから削除し、デバッグして、モデルをリビルドします。

現在選択されているシステム ターゲット ファイルで使用するためのものではないブロック (デバイス ドライバー ブロックなど) がモデルに含まれています。

システム ターゲット ファイル固有のブロックを削除するか、別のシステム ターゲット ファイルで使用するようにモデルを構成します。

モデル ビルドにおいて、モデル参照階層から実行可能プログラムを生成し、次のすべての条件に該当するときに、データへの未定義の参照に関するリンカー エラーが表示されます。

  • Simulink.Signal のようなデータ オブジェクトを作成することによって、信号、状態またはパラメーター データを表現しています。モデル参照階層のオブジェクトを使用しています。

  • データ オブジェクトを伴うカスタム ストレージ クラスを使用しています。カスタム ストレージ クラスには Embedded Coder が必要です。

  • オブジェクトのオーナーをデータに直接アクセスしないモデルに設定しています。

  • ツールチェーン lcc-win64 を使用しています。

この問題を解決するには、次のいずれかの方法を選択します。

  • データ オブジェクトの Owner プロパティをクリアします。または、オーナーをデータに直接アクセスするモデルに設定します。

  • lcc の代わりに gcc などの別のツールチェーンを使用します。

LCC コンパイラがソース フォルダー パスでアンパサンドをサポートしない

説明

LCC コンパイラを使用していて、モデルのフォルダー パスにアンパサンド (&) が含まれている場合、ビルド プロセスによってエラーが生成されます。

アクション

モデルのフォルダー パスからアンパサンドを削除します。次にモデルをリビルドします。

LCC コンパイラがラピッド アクセラレータ コードの行の長さに対応していない可能性がある

説明

ラピッド アクセラレータ コードをコンパイルしている場合、LCC コンパイラは行制限に関するエラーを生成する可能性があります。ラピッド アクセラレータ コードの行は、難読化のためにより長くなる可能性があります。

アクション

より長いコード行をサポートするコンパイラを使用して、ラピッド アクセラレータ コードをコンパイルします。

関連するトピック

外部の Web サイト