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

조회 수: 5 (최근 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 CenterFile Exchange에서 MATLAB Compiler SDK에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!