私が正しく理解していれば、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 番目の質問は、この問題を解決するにはどうすればよいですか、またはこの例を実行する簡単な方法はありますか?