1

を使用して MATLAB のエンジンを呼び出すと、C/C++ プログラムがクラッシュする原因を突き止めようとしていengOpen()ます。以下のコードは、出力Hello WorldしてからAPPCRASH.

このクラッシュの原因は何ですか、またはここからデバッグするにはどうすればよいですか?

testMATLAB.c

#include <stdio.h>
#include "engine.h"

int main(){
printf("Hello World.\n");
    Engine *ep;
        if (!(ep = engOpen(NULL))) {
            printf("Can't start MATLAB engine\n");
        } else {
            printf("Opening Matlab Engine\n");
        }

return 0;
}

出力後に実行可能ファイルが実行時にクラッシュする

詳細

私は使っている:

  • MATLAB R2012a
  • mingw-w64 gcc バージョン 4.8.0
  • 64 ビット Windows 7

多くの既存の SO Q&A に応えて、私は

  • と にリンクしていることを確認しましC:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft\libeng.libC:\Program Files\MATLAB\R2012a\extern\lib\win64\microsoft\libmx.lib
  • C:\Program Files\MATLAB\R2012a\bin\win64とを含む私のパスに含まlibengine.dllれていますlibmx.dll
  • matlab /regserverWindowsコマンドプロンプトから実行

engOpen()実行されていないステートメント内に配置するifと、コードが最後まで実行されることに注意してください。

また、これは mingw に固有のものではないと思います。なぜなら、32 ビットの WinXP マシンでは、MATLAB 2011 をmingw32.

コンパイラとリンカーの出力はhttp://pastebin.com/z9CAsb6Xにあります

4

3 に答える 3

0

Visual Studio を使用して同様の問題が発生しました。Matlab 64ビットが閉じた後に警告を処理する方法に関係していると思います。私は追加しなければなりませんでした:(Mathworksはそこで私の問題を解決しました)

warning('off','MATLAB:ClassInstanceExists') % Add this line

私のmatlabコードに、おそらく私のコードには実際には必要のないmatlabクラスがあったことを意味していましたが、それでもmatlabコンパイラが見つけたかったのですか? (私の推測...)

これが直接機能しない場合は、より多くの警告を無効にすることをお勧めしますか?...

于 2014-04-15T10:16:16.570 に答える
0

*.lib をどのようにリンクしましたか? 私のプロジェクトでは PostgreSQL を使用しており、提供された MSVC でコンパイルされた *.lib をリンクする代わりに、*.a に変換する必要がありました。以下のような手順だったと思います。

http://oldwiki.mingw.org/index.php/CreateImportLibraries

于 2013-04-24T13:47:28.583 に答える