問題タブ [mex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - mex ファイルで imresize を呼び出す方法 (MATLAB)
imresize
関数を mex ファイルで使用するために、次のコードを作成しました。
エラーが発生します:Function IMRESIZE expected its second input, SCALE, to be nonzero.
どうすれば修正できますか?
c - Cライブラリの静的構造体を解放する
私が取り組んでいるプロジェクトには、Cライブラリ(.out)に記述されたGNCコードを備えた飛行体が含まれます。このCコードをLabVIEW(主要なアビオニクスソフトウェア)から.outライブラリの形式で呼び出す必要があります。ソフトウェアの性質上、関数への連続する呼び出しの間にデータを格納するために静的ポインタが必要です。フライト中、定期的にGNC実行機能を呼び出します。現在、WindowsのDLLでMatlab MEXラッパーを使用してこの関数を呼び出そうとしていますが、これにより、いくつかのメモリ管理の問題が明らかになりました。
私はこのような関数の最初に構造を宣言しています:
これは、関数の実行ごとに発生します。ただし、この関数が数回繰り返し呼び出された後、終了しようとすると、常にメモリセグメンテーション違反でクラッシュします。私の理解では、この記憶はそれ自体をきれいにするはずだったのですが、それは間違っていますか?
手動でクリーンアップするために、これらの行を最後に追加して、クリーンアップの反復でのみ呼び出されるようにしました。
これは、このメモリを解放する正しい方法ですか?このメモリを解放できますか?Cが最後の呼び出し後にメモリを適切に放棄しなかった、またはMatlabがメモリを適切に管理しなかった以外に、セグメンテーションエラーの別の理由があるのでしょうか。運が悪かったので(Mathworksに連絡しても)同様の問題を抱えている人を探し回ったので、コメントや提案をいただければ幸いです。
matlab - Mex ファイルは、2 回目の使用でのみセグメンテーション違反を引き起こします
次のコードは正常にコンパイルされ、最初に呼び出されたときに正しい結果を返します。同じ呼び出しを 2 回行うと、セグメンテーション違反エラーが発生します。
私はそれを次のように呼び出します:
コードは、セグメンテーション違反の前に 2 つの mexPrintf 呼び出しの間の行に到達します (つまり、最初の呼び出しは出力されますが、2 番目の呼び出しは出力されません)。
私は Matlab 2007a (はい、知っています)、Win7 64 ビット、および VS 2008 を使用しています。
matlab - matlab mex:データにアクセスする
ねえ、私はmatlabの引数を介してmex-functionに渡されたデータにアクセスする方法を本当に理解していません。私が「デフォルト」ゲートウェイ機能を持っていると仮定します
そして今、私は1.入力引数へのポインタを取得します。
次の両方の行は、それぞれ別々に私のmatlabをクラッシュさせます。
しかし、data_inが明らかに最初の引数へのポインターであるのに、なぜそのようなデータにアクセスできないのでしょうか。
- いつポインタをdouble*として宣言する必要があり、いつmxArray *として宣言する必要がありますか?時々私はそのようなものを見ます:mxArray * arr = mxCreateDoubleMatrix(n、m、mxREAL);!?
よろしくお願いします!
matlab - Max-flow/min-cutアルゴリズムでmexファイルをリンク中にエラーが発生しました
「GrabCutに基づくオブジェクトセグメンテーション手法」アプローチをMATLABに実装しようとしています。マルコフ確率場のエネルギー関数を最小化するために、ここで提供されている標準の最大フロー/最小カットアルゴリズムを使用しています:http://vision.csd.uwo.ca/code/
質問:MATLABでグラフの作成と最小化の関数を呼び出すためにmexファイルを作成しようとすると、次のエラーが発生します。
未定義のシンボル: "Graph :: Graph(int、int、void()(char))"、参照元:GraphTest.oの_mexFunction
ld:シンボルが見つかりませんcollect2:ldが1つの終了ステータスを返しました
mex:'"GraphTest.mexmaci64"'のリンクに失敗しました。
私のコードは本当に単純で、READMEファイルに記載されているコードの一部を次のようにコピーしただけです。
以前にこのパッケージを使用したことがあるか、同様の種類のエラーを経験したことがある人が、問題についての洞察を提供してくれると本当にありがたいです。
前もって感謝します!
c++ - mex -largeArrayDims中にこのCPPファイルでエラーが発生するのはなぜですか?
コードをダウンロードしました:
Visual C++2010コンパイラmex -largeArrayDims thisfile.cpp
を選択して使用しました。ただし、次のエラーが発生します。
mex -largeArrayDims a_times_b_cmplx.cpp
a_times_b_cmplx.cpp(45)
:エラーC4430:型指定子がありません-intと見なされます。注:C ++はdefault-intをサポートしていませんa_times_b_cmplx.cpp(45)
:エラーC2143:構文エラー:','
前にありません'*'
a_times_b_cmplx.cpp(54)
:エラーC2065 ::'pntrb'
宣言されていない識別子 :a_times_b_cmplx.cpp(55)
エラーC2065 ::宣言されていない識別子:エラーC2065 ::宣言されていない識別子 :エラーC2065 ::宣言されていない識別子 :エラーC2065::宣言されていない識別子 :エラーC4430:型指定子がありません-intと見なされます。注:C ++はdefault-intをサポートしていません :エラーC2143:構文エラー:前にありません:エラーC2065 ::宣言されていない識別子 :エラーC2065 ::宣言されていない識別子'pntrb'
a_times_b_cmplx.cpp(57)
'b'
a_times_b_cmplx.cpp(57)
'indx'
a_times_b_cmplx.cpp(58)
'c'
a_times_b_cmplx.cpp(156)
a_times_b_cmplx.cpp(156)
','
'*'
a_times_b_cmplx.cpp(159)
'c'
a_times_b_cmplx.cpp(169)
'pntrb'
a_times_b_cmplx.cpp(170)
:エラーC2065 ::'pntrb'
宣言されていない識別子a_times_b_cmplx.cpp(172)
:エラーC2065 ::'indx'
宣言されていない識別子a_times_b_cmplx.cpp(174)
:エラーC2065 ::'c'
宣言されていない識別子a_times_b_cmplx.cpp(174)
:エラーC2065 ::宣言されていない'b'
識別子a_times_b_cmplx.cpp(178)
:エラーC2065 ::'c'
宣言されていない識別子a_times_b_cmplx.cpp(178)
:エラーC2065 ::'b'
宣言されていない識別子a_times_b_cmplx.cpp(180)
:エラーC2065 ::'c'
宣言されていない識別子a_times_b_cmplx.cpp(180)
:エラーC2065::'b'
宣言されていない識別子
C:\PROGRA~1\MATLAB\R2010A\BIN\MEX.PL
:エラー:コンパイルに'a_times_b_cmplx.cpp'
失敗しました。
なぜこれらのエラーが発生するのかわかりません。これは完成したライセンスコードであり、私はそれを修正できるはずです。理由を教えて、これを修正する方法を教えてください。コンパイラが問題なのか私なのか本当にわかりません。
のせいかもしれませんmwIndex
。しかし、どうすればこれを解決できますか?
c - セグメンテーション違反エラー
C を練習するための RLS フィルター用の MATLAB/mex コードを作成しようとしています。ただし、入力を使用して次のコードを実行しようとすると、セグメンテーション違反エラーが発生します。
Atm エラーの原因を突き止めることができたので、大量のコードを切り取りました。以下のコードの次の部分をコメントアウトすると、実行されます(ただし、私には役に立ちません)。配列で使用されているインデックスを出力して、それらのいずれかが負になるかどうかを確認しようとしましたが、うまくいきませんでした。だから私は本当にエラーを見つけることができません。おそらくばかげた何かですが、エラーが何であるかを見つけることができません。以下の同じコード スニペットを別の関数 (LMS フィルター用) で使用したところ、正常に動作しました。2 つの関数の主な違いは、処理に必要な一時配列の量です。したがって、大きな問題は、セグメントにつながるコードの明らかな間違いに誰かが気付いているかということです。障害?(それ以外の場合、コードはおそらくできる限り良くないことを知っています。
function - matlabのm-fileへのmex-function呼び出しを制限します
'myMx'という名前のコンパイル済みmexファイルがあると仮定して、myMx()への直接呼び出しを禁止する方法はありますか?myMx()をm-file関数callMyMx()から呼び出すだけにしたいのは、ここで追加の入力引数チェックを実行して、mex-file自体で呼び出す必要がないためです。ありがとう!
function - Matlab MexfilesとCuda:関数ハンドルを評価する
ねえ、私はCUDAの助けを借りて並列化したいmexファイルを持っています。現在の機能は次のとおりです。関数ハンドルと膨大な数の「ポイント」をmexファイルに渡し、シーケンシャルモード(CPU上)で各ポイントの関数を評価します。そのため、次のようなものを使用します。
matlab-function fevalを使用して、ポイントの関数Handleを評価します。CUDAを介して計算を並列化しようとするとどうなるのでしょうか。これは正しく機能しますか?mexCallMATLABを使用した評価がCPUで行われる場合、CUDAを使用してもメリットはありません。しかし、それをどのように行うのですか?matlab-function fevalを使用せずに、Cの特定のポイントで関数ハンドルを直接評価する方法を想像することはできません...
これまでのところありがとう!あなたは私を大いに助けてくれるでしょう!
performance - コードを変更しないと Matlab MEX が遅くなる
ここ数週間、ちょっとしたコードを開発してきました。コードは MATLAB の MEX ファイル内にラップされます。昨日まで、私の通常のテストは約 1 秒かかりました。何も変更せずにコードを再コンパイルした後、突然、同じコードに 4 秒以上かかります。
唯一の変更は、呼び出している関数とはまったく関係のない関数で発生しました。すべてのコンパイラーの最適化が、1 秒ごとに消えてしまったようです。
過去に似たような経験をしたことがあり、対処法を知っている方はいらっしゃるのではないでしょうか?
ご提案いただきありがとうございます。
編集1:
コンパイラに依存するものだと思いますが、ここではコンパイルコマンドの出力です(詳細モードを使用)