loadlibrary を含むアプリケーショ​ンはどのようにスタン​ドアロンアプリケーシ​ョン化するのですか?

6 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2023 年 6 月 28 日
回答済み: MathWorks Support Team 2023 年 6 月 28 日
私のアプリケーション(.m ファイル)では loadlibrary を使用して外部の共有ライブラリ(DLL)を使用しています。そのアプリケーションを MATLAB Compiler でコンパイルし、配布先で実行するとモジュールが見つからないことを示すエラーが発生します

採用された回答

MathWorks Support Team
MathWorks Support Team 2023 年 6 月 28 日
loadlibrary を使用するアプリケーションをスタンドアロンアプリケーション化して配布するには、2 つの手順が必要です。
1) プロトタイプの .m ファイルの作成
loadlibrary 関数を配布するためには、プロトタイプの .m ファイルを作成し、それをヘッダーファイルとして使用する必要があります。例えば以下のように loadlibrary を使用する場合を考えます。
loadlibrary(library, header)
まず、プロトタイプの .m ファイルを作成するために以下のように loadlibrary を実行します。
loadlibrary(library, header, 'mfilename', 'PrototypeName'); 
これにより現在のフォルダーに PrototypeName.m ファイルが作成されます。64 ビット MATLAB を使用する場合は、library_thunk_pcwin64.dll も追加で作成されます。このファイルも後で必要になります (64 ビットのみ)。
次に作成されたプロトタイプの .m ファイルを使用するため loadlibrary を次のように変更します。
loadlibrary(library, @PrototypeName)
2) アプリケーションのコンパイル
アプリケーションをコンパイルしてスタンドアロンアプリケーション化する際、ライブラリ(DLL)をアプリケーションに含ませるか、外部ファイルとして配布するかを選択できます。
2.1) ライブラリをアプリケーションに含ませる場合
こちらの場合、ライブラリを共有リソースまたはヘルパーファイルとして手動で追加する必要があります。
・mcc コマンドの場合
-a オプションを使用してアプリケーションコンパイラに DLL を追加します。
https://jp.mathworks.com/help/compiler/mcc.html
・アプリケーションコンパイラの場合
「アプリケーションの実行に必要なファイル」に DLL ファイルをドラッグして追加します。さらに library_thunk_pcwin64.dll も同様に追加します。
https://jp.mathworks.com/help/compiler/applicationcompiler-app.html
2.2) ライブラリを外部ファイルとして提供する場合
DLL をアプリケーションに含めない場合は、コードを調整せずに、コンパイルされたアプリケーションと同じフォルダーに DLL をコピーすることもできます。ただし library_thunk_pcwin64.dll についてはスタンドアロンアプリケーションに含ませる必要があります。こちらが含まれない場合、実行時に library_thunk_pcwin64.dll が見つからず、モジュールが見つからないというエラーとなります。
外部ファイルとして提供する方法のメリットは MATLAB アプリケーション全体を再コンパイルすることなく、ライブラリを新しいバージョンに置き換えることができることです。ただし、ライブラリを別のバージョンに置き換えることは、プロトタイプの m ファイル (および 64 ビットの library_thunk_pcwin64.dll) がライブラリ内の関数の関数シグネチャに関連付けられているため、ライブラリ内の関数の関数シグネチャが同じである場合にのみ可能となります。
ご参考:
https://jp.mathworks.com/help/matlab/ref/loadlibrary.html

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMATLAB Compiler SDK についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!