コンパイラとリンカーのエラー
MATLAB® Coder™ からライブラリ、MEX 関数、または実行可能ファイルを生成するとき、コード ジェネレーターは C/C++ コンパイラを呼び出してバイナリ アーティファクトをビルドします。この処理中に、ビルド エラーが発生することがあります。これらのエラーは、コンパイル段階、リンク段階、またはビルドのその他の段階で発生する場合があります。コンパイル エラー、リンク エラー、および警告は、コード生成レポートの [ビルド ログ] タブで確認できます。
表示される特定のエラー メッセージと警告は、プラットフォームで使用するコンパイラとツールチェーンによって決まります。現在のコンパイラを確認するか、別のものを選択するには、コマンド プロンプトで次を入力します。
mex -setup
ビルド エラーが発生する理由は多種多様です。エラーを診断して修正するには、コンパイラのドキュメンテーションに記載されているエラー メッセージを調べる必要がある場合があります。コード生成時にビルド エラーを引き起こす可能性のある、よくある問題を以下に示します。
main 関数が指定されていない
C/C++ 実行可能ファイルを生成するには、main 関数を指定します。main 関数を指定しないと、ビルド エラーが発生します。main 関数は、別のメイン ファイルに格納されます。コードを生成するとき、MATLAB Coder はメイン ファイルの例を生成しますが、それをコンパイル時に自動的に使用することはありません。このメイン関数の例は、モック入力値によって生成コードを呼び出します。現実的な入力と出力の処理を行うには、このメイン ファイルの例を変更するか、独自の main 関数を作成しなければなりません。
メイン ファイルは、codegen
コマンドのコマンド ライン パラメーターとして指定するか、MATLAB Coder アプリで、または構成パラメーターを使用して指定できます。詳細と例については、以下を参照してください。
生成したメイン ファイルの例をコード ジェネレーターが自動的に使用して、テスト目的の実行可能ファイルをビルドするように設定するには、構成オブジェクトの GenerateExampleMain
プロパティを 'GenerateCodeAndCompile'
に設定します。main 関数の例を使用した生成コードの組み込みを参照してください。
外部コード ファイルが指定されていない
コードの coder.ceval
に外部 C 関数が使用されている場合、その関数を含む外部ファイルを指定しなければなりません。そうしない場合、ビルド エラーが発生することがあります。ファイルは、codegen
コマンドのコマンド ライン パラメーターとして指定するか、MATLAB Coder アプリで、または構成パラメーターを使用して指定できます。詳細と例については、以下を参照してください。
外部コードによるエラー
ビルド プロセスで外部コードを導入すると、その外部コード独自のエラーが取り込まれることがあります。外部コードは、複数の方法で導入できます。
外部ヘッダー ファイルに定義される
coder.opaque
を使用して作成する外部型の定義外部ヘッダー ファイルに定義される
coder.cstructname
を使用して作成する構造体型の定義coder.ceval
を使用した外部コード呼び出しcodegen
コマンドへの外部ビルド ファイルの指定coder.cinclude
またはcoder.updateBuildInfo
による外部コード ファイルのインクルードパラメーター [追加インクルード ディレクトリ] または [追加ソース ファイル] を使用した外部コードのインクルード。
このリストがすべてを網羅しているとは限りません。これらの方法で発生したエラーに対処するには、外部コードの問題を調査して修正するか、MATLAB コードからその外部コードを分離しなければなりません。
Windows のパス長制限が原因で発生するエラー
Microsoft® Windows® プラットフォームで C/C++ コードを生成する場合、ファイル名とファイル パスの長さが Windows で許可されている最大長を超えると、エラーが発生することがあります。このような場合、コンパイラは必要なファイルやディレクトリを見つけることができません。この問題を解決するには、次のいずれかの解決策を試してください。
プロジェクト フォルダーをルート ディレクトリの近くに移動して、ファイル パスを短くする。Windows プラットフォームでは、ルート ディレクトリはバックスラッシュ (
\
) で示されます。Windows コマンド
subst
を使用して、プロジェクト フォルダーに直接マッピングするバーチャル ドライブを作成する。たとえば、プロジェクト フォルダーのパスがC:\Users\user1\OneDrive - MyBuisness\Documents\Projects\My MATLAB Project
の場合、Windows コマンド プロンプトで次のコマンドを入力して、バーチャル ドライブZ:
をプロジェクト フォルダーに直接マッピングします。このコマンドを実行した後は、「subst z: C:\Users\user1\OneDrive - MyBuisness\Documents\Projects\My MATLAB Project
Z:
」と入力することでMy MATLAB Project
フォルダーにアクセスできます。詳細については、Microsoft のドキュメンテーションsubst
を参照してください。Windows 10 Version 1607 以降のプラットフォームで、長いパスのサポートを有効にする。Microsoft のドキュメンテーションのパスの最大長の制限を参照してください。
Linux における古い C/C++ コンパイラ バージョンが原因で発生するエラー
Linux® プラットフォームで MATLAB を実行し、GCC コンパイラが MATLAB インスタンスよりも大幅に古い場合、プリコンパイルされたライブラリを使用する特定の MathWorks® ツールボックス関数用のコード生成が失敗することがあります。プリコンパイルされたライブラリを使用するツールボックス関数には、imfilter
(Image Processing Toolbox)、bwpack
(Image Processing Toolbox)、regionprops
(Image Processing Toolbox) などのイメージ処理関数が含まれますが、これらに限定されません。
この問題を解決するには、Linux プラットフォームで GCC コンパイラをアップグレードして、glibc
ライブラリや libstdc++
ライブラリを更新します。
実行時スタック オーバーフロー
C コンパイラが実行時スタック オーバーフローを報告する場合は、[最大スタック使用量] パラメーターを使用して、最大スタック使用量パラメーターの値を、使用可能なスタック サイズより小さく設定します。