MS Visual Studio 2010 Express Edition で使用する C の共有ライブラリを作成するにはどうすればよいですか?
5 views (last 30 days)
Show older comments
MATLAB Compiler で C の共有ライブラリを作成し、Microsoft Visual Studio 2010 Express Edition から呼出したいのですが、
1. MATLAB Compiler でのビルド手順
2. Visual Studio の開発環境での設定/初期化手順
を教えてください。
Accepted Answer
MathWorks Support Team
on 7 Nov 2018
■概要
手順の概要は、次の通りです。
1. MCC コマンドで使用するコンパイラを選択します。
mbuild -setup
2. MATLAB ファイルをビルドし、共有ライブラリ(.DLL)を作成します。
mcc -B csharedlib:mylib <MATLAB files>
-B csharedlib オプションは、下記のバンドルオプションです。
-W lib:<libname> -T link:lib
-W lib:<libname> オプションは、MATLAB Compiler に共有ライブラリのラッパー関数を作成し、 libname で呼び出すように指定します。 -T link:lib オプションは、共有ライブラリのターゲット出力を指定します。
注意:Compiler が共有ライブラリを出力するディレクトリにご注意ください。上記ステップでは、mylib.dll, mylib.lib, mylib.h が生成されます。-g オプションで、MSVC(もしくは、他のIDE)でデバッグに適した DLL を生成することもできます。
また、上記コマンド実行の代わりに、DEPLOYTOOL を用いて、ターゲットに適した C 共有ライブラリを生成することもできます。
3. mylib.lib を MSVC(もしくは他の IDE)プロジェクトに追加します。
4. 生成された DLL 関数を呼び出す前に、初期化と終了ルーチンを記述します。
共有ライブラリと MCR の初期化では、以下をコールします。
mclInitializeApplication(NULL,0);
mylibInitialize();
終了ルーチンは、以下をコールします。
mclTerminateApplication();
mylibTerminate();
■実際の例
以下では、 C コードから、生成された DLL を介して MATLAB 関数を実行する例を示します。
1. MATLAB 環境での実行手順
1) MATLAB 関数 foo (ファイル名 foo.m) を作成します。
function y = foo(x)
y = x+1;
2) MCC コマンドで使用するコンパイラを選択します。
mbuild -setup
3) MCC コマンドで foo.m を C の共有ライブラリにコンパイルします。
mcc -B csharedlib:foolib foo.m
生成されるファイルには、次のようなものがあります。
foolib.h
foolib.dll
foolib.lib
foolib.exp
foolib.c
foolib.exports
2. Microsoft Visual 2010 Express Edition での実行手順
1) Microsoft Visual 2010 Express Edition IDE を起動します。
2) [ファイル]->[新規作成]-> [プロジェクト]を選択し、[新しいプロジェクト] の "VisualC++"テンプレートから [Win32 コンソール アプリケーション]を選択します。[名前]には、"test" と入力し、[OK]ボタンを選択します。表示された[Win32 アプリケーション ウィザード]で、[アプリケーションの設定]を選択し、[追加のオプション]の下にある "空のプロジェクト" にチェックし、[完了]ボタンを選択します。
3. [ソリューション エクスプローラー] タブを選択し、[ソースファイル]を選択します。[プロジェクト]メニューから、[新しい項目の追加]を選択します。[Visual C++]テンプレートを選択し、[C++ ファイル(.cpp)]を選択します。[名前] には、"foowap.c" を入力し、[追加]ボタンを選択します。
4. foowrap.c に下記コードを入力します。
/* Include the MCR header file and the library specific header file
* as generated by MATLAB Compiler */
#include "foolib.h"
#include "mclmcr.h"
#include <stdio.h>
int main()
{
mxArray *x_ptr;
mxArray *y_ptr=NULL;
double *y;
double ret;
/* Call the MCR and library initialization functions */
if( !mclInitializeApplication(NULL,0) )
{
fprintf(stderr, "Could not initialize the application.\n");
exit(1);
}
if (!foolibInitialize())
{
fprintf(stderr,"Could not initialize the library.\n");
exit(1);
}
/* Create an mxArray to input into mlfFoo */
x_ptr = mxCreateDoubleScalar(1);
/* Call the implementation function */
/* Note the second input argument should be &y_ptr instead of y_ptr*/
mlfFoo(1,&y_ptr,x_ptr);
/* The return value from mlfFoo is an mxArray so we must extract the data from it */
y = mxGetPr(y_ptr);
ret = *y;
/* Print a double precision number*/
printf("The output of foo is %f\n",ret);
/* Call the library termination function */
foolibTerminate();
mxDestroyArray(x_ptr);
mxDestroyArray(y_ptr);
mclTerminateApplication();
return 0;
}
5. [ソリューション エクスプローラー]タブを選択します。[プロジェクト]メニューから、[プロパティ]を選択し、[リンカー]の下にある[全般]カテゴリを選択します。 [追加のライブラリ ディレクトリ] に foolib.lib の場所と、下記のパスを入力します。
$MATLABROOT\extern\lib\<arch>\microsoft
※$MATLABROOT は、MATLAB インストールディレクトリを示します。
※<Arch> は、OSを示します。(例:Windows 32bit OS の場合-> win32, Windows 64bit OS の場合 -> win64)
なお、MATLAB 7.2(R2006a) よりも前のバージョンをご利用の場合には、下記のようにサブディレクトリまで指定してください。
$MATLABROOT\extern\lib\<arch>\microsoft\msvc71
6. 同じく[リンカー]の下にある [入力]を選択し、[追加の依存ファイル]に、以下のファイル名を追加します。
mclmcrrt.lib
foolib.lib
7. [C/C++] の下にある [全般]を選択し、 [追加のインくーど ディレクトリ]に、以下のパスを入力します。
$MATLABROOT\extern\include
また、foolib.h が含まれるディレクトリのパスも同様に入力します。
8.[C/C++] の下にある [コード生成]を選択し、[ランタイム ライブラリ] にて "マルチスレッドDLL(/MD)" を選択し、[OK] ボタンを選択します。
9.同プロパティダイアログの上側にある [プラットフォーム]にて、ターゲットマシンを確認します。これは、リンクしたいライブラリの開発環境と一致させる必要があります。例えば、'x64' を選択する場合は、64bit MATLAB ライブラリにリンクします。 'Win32' を選択する場合は、32bit MATLAB ライブラリにリンクします。
Visual Studio プロジェクトのターゲットプラットフォームの変更方法の詳細については、下記 URL をご参照ください。
・(参考)MSDN 方法 : Visual C++ プロジェクトを 64 ビット プラットフォーム用に設定する
10. [ソリューション エクスプローラー]タブを選択し、ソリューションを右クリックし、[ソリューションのビルド]を選択します。これにより、 text.exe が生成されます。
ビルドの前に、必ず上記 9 の [プラットフォーム]の選択を正しく設定してください。なお、'x64' を選択した場合には、ビルド後に 'x64' という名前のフォルダがプロジェクトの作業ディレクトリに追加され、その中に生成されたアプリケーションが保存されます。
11. foolib.dll を test.exe があるフォルダに保存します。
12. test.exe を実行します。
0 Comments
More Answers (0)
See Also
Categories
Find more on MATLAB 関数のパッケージ化 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!