5

MATLABツールキット' oscmex 'からいくつかのサンプルコードを実行しようとしています。このツールキットを使用すると、MATLABを介したOSCプロトコルを使用した通信が可能になります。この質問は具体的ではないと思います。これは、この方法でセットアップされたすべてのツールキットに適用する必要があります。

理由はさておき、ツールキットを起動して実行するのに簡単な問題があります。ツールキットにはドキュメントがまったく含まれていません。6つのDLLファイルのセット(1つのディレクトリ内)と4つのMATLAB'.m'サンプルコードファイルのセット(別のディレクトリ内)。私が過去に使用したすべてのツールキットは、組み込みキットであるか、直感的な(半自動化された)インストール手順を備えています。

ツールキットをダウンロードした後、私が最初に試したのは、「。M」サンプルコードの1つを実行することでした。コードの最初の行に関数osc()が含まれていたため、これは失敗しました。この関数は(現在)MATLABによって認識されていません。

そのため、「。M」ファイルをDLLと同じフォルダーに移動する必要があるのではないかと考えました。おそらくMATLABはDLL内の関数を見るでしょう。サイコロはありません。

そのため、起動時にMATLABをDLLにリンクする必要があることに気付きました。DLLをフォルダに追加し、そのエントリを「pathdef.m」ファイルに追加してみました。これも失敗しました。

loadlibrary()関数を使用してDLLファイルをロードできる場所を読みました。そこで、DLLファイルに対してこれを試してみました。これは最初のファイルで失敗しました:

>> loadlibrary('osc_free_address.dll')

Error using loadlibrary>lFullPath (line 587)
Could not find file osc_free_address.h.

オプションが不足し始めています...このDLLのセットを起動して実行するにはどうすればよいですか?

4

5 に答える 5

1

そのソフトウェアのビルドを見ると、DLL(共有ライブラリ)ではなく、mexファイルをコンパイルしています:http ://sourceforge.net/p/oscmex/code/4/tree/trunk/src/osc_make.m 。

dllコマンドの代わりにmexコマンドを使用してみます(おそらくファイルの名前が間違っているだけです)。さらに良いことに、ソースのビルドファイルを使用してmexでファイルを自分でコンパイルします。

ライブラリを実行するにはliblo-0.22が必要であると説明されているので、ライブラリにもアクセスできることを確認してください。

于 2013-02-11T17:42:50.610 に答える
1

このライブラリのWebページを閲覧すると、これらのDLLは単なる古い形式mexファイルのように見えます。
したがって、共有ライブラリのコンテキストで使用するのではなくloadlibrary(たとえば、 andを使用してcalllib)、mexファイルに直接コンパイルする必要があります。

そのためには、次の手順をお勧めします。

  1. Matlab用に動作するmexコンパイラが構成されていることを確認してください。
    matlabで、次のように入力します。

    >> mex -setup
    

    これにより、構成プロセスがガイドされます。あなたがWindowsマシンで作業していることを理解しています。私は通常、VisualStudioコンパイラを使用しています。

  2. このライブラリのREADMEファイルは、OSCが

    liblo0.22以降が必要です。http://plugin.org.uk/liblo/を参照してください

    このライブラリがあり、それが自分の中にあることを確認してくださいLD_LIBRARY_PATH(たとえば、詳細についてはこの質問、またはmexドキュメントを参照してください)。

  3. OSCライブラリのソースコードをリポジトリから取得します。

  4. を使用してmatlabでソースをコンパイルします

    >> mex -O -largeArrayDims osc_free_address.c
    >> mex -O -largeArrayDims osc_free_server.c
    

    7つのcソースファイルすべてについても同様です。cファイルをmexすると、通常の関数であるかのようにMatlabから実行できるmexファイルが作成されます。Andrew Maoが提案したように、ライブラリのmakeファイル
    を使用すると便利な場合があります。

幸運を、

于 2013-02-12T06:45:06.667 に答える
0

私はあなたのOSCツールキットを見ました。それらはMATLABmexによってコンパイルされたようです。しかし、それらがどの種類のアーキテクチャーのために構築されたかについては言及されていません。mexextMATLABコマンドプロンプトで入力して、MATLABmexファイルの拡張子を見つけることができます。次に、DLL拡張子を指定された拡張子に変更します。元のmexがmatlabと互換性がある場合、MATLABからDLLに簡単にアクセスできます。フォルダをMATLABパスに追加してください。

于 2013-02-12T05:53:46.643 に答える
0

拡張子を.dllから.mexw32(win32の場合)または.wexw64(win64の場合)に変更してみてください。ロングショットですが、うまくいくかもしれません。

于 2013-02-13T12:19:31.190 に答える
-1

共有ライブラリを直接使用することはできません。すでに述べたように、を使用してそれらをMATLABにロードする必要がありますloadlibrary。ドキュメントによると、loadlibrary(少なくとも)2つの引数を取ります。最初の引数はファイルの名前であり、2番目の引数は関数と外部変数の定義を含むヘッダーファイルです。ヘッダーファイルを指定しない場合、MATLABはDLLと同じ名前のファイルを探します。そうは言っても、ヘッダーファイルにアクセスできる必要があります。少なくとも、関数がどのように見えるかを知っている場合は、DLLのヘッダーを作成する必要があります。

私はMATLABでDLLを操作しました。DLLに関する限り、MATLABはあまりユーザーフレンドリーではありません。特に、DLLがC(またはC ++)以外の言語で記述されている場合、MATLABに関数をロードする際に問題が発生します。

さらに、MATLABは特定のDLLのみをサポートできます。お使いのMATLABのバージョンに基づいて、共有ライブラリがMATLABでサポートされているかどうかを確認する必要があります。こちらをご覧ください

一言で言えば、DLLをMATLABにロードするのは簡単ではありません。DLLからの情報が必要です。

于 2013-02-12T05:14:12.840 に答える