0

私が正しく理解していれば、API の背後にある考え方は、C++ と MATLAB (コンピューター上で MATLAB 環境が稼働している場合) との間でデータをやり取りして、両方の世界を最大限に活用できるようにすることです。

具体的には、C++ プログラムからプロットを取得するたびに MATLAB を手動で開く必要がないように、シミュレーション コードで API を使用することです。MATLABでmexを使用して直接コンパイルするなど、他のオプションがあることを理解しています(コンパイルされたファイルを実行すると、共有ライブラリを適切にロードできないため、これはできませんでした)...

まず、MATLAB が提供するサンプル (engdemo.cpp) を実行してみました。

ライブラリと必要なヘッダー ファイルへの参照を含めるように、makefile を更新してみました。

MATLABROOT = /.../matlab/ r2012b

CFLAGS = -I${MATLABROOT}/extern

ライブラリ = -L${MATLABROOT}/bin/glnxa64

次に g++ $(CFLAGS) $(LIBS) -leng -lmx demo.cpp -o demo

しかし、libeng と libmx が他の *.so ファイルを見つけられないという警告がたくさん表示されます。

*.so (つまり .../bin/glnxa64) を含むフォルダーを手動で確認したところ、-leng と -lmx ではなく、libeng と libmx と呼ばれていることがわかりました。

1) ではまず、なぜ別の呼び方をしなければならないのか知りたいのですが?

警告メッセージは、-rpathまたは-rpath-linkオプションを使用するようにアドバイスしましたが、これはある種の再帰であると推測しましたが、すべての *.so が同じフォルダーにあるため、理解できません。オプションが認識されないため、まだ試してみましたが、機能しませんでした。したがって、他の *.so の実行を手動で要求しようとしましたが、一部では機能しましたが、すべてではありませんでした。その時点では、-lib* の代わりに -l*** と呼ばれる理由がわかりませんでした。 **。

2) 2 番目の質問は、この問題を解決するにはどうすればよいですか、またはこの例を実行する簡単な方法はありますか?

端末出力のスクリーンショットを次に示します。 ターミナル出力、参考文献にリンクがありません

4

1 に答える 1

0

どちらの場合も、バージョン管理の問題だったと思います。再インストールしたところ、(ほぼ)すべてが機能しました。

于 2016-02-17T06:52:57.333 に答える