2017-09-04 4 views
1

私はmatlab mex関数にはかなり経験がありますが、解決するのが非常に困難です。無効なMex-function

私はこのようなメッセージを受信して​​います:

無効なMEXファイル 「mymex.mexw64」: 指定されたプロシージャが見つかりませんでしたが。

通常、この問題はdllの不足に関連しています。 しかし、私は依存性歩行者と数回チェックし、何も欠けています。

また、「代替」ソフトウェア、たとえばProcessMonitor、ProcessExplorer、CFF_Explorerなどでチェックしました。私はすべてを試しました。

問題は、古いコードをMatlab2012からMatlab2015に移行しようとしたときに始まりました。このプロセスで

  1. 私は新しいバージョン(はい、私のMEX関数は、QTを使用しています)
  2. 変更されたプラットフォームにqtのバージョンを変更libmx、現在のものにlibmex(2015)
  3. を更新v140(旧バージョンはv110、Visual Studio 2012)

私の唯一の仮説は、カスタム* .libファイルを使用したものです。これらのlibファイルはv110でコンパイルされ、v140を使用しています。私の配布パッケージでは、Visual C++再頒布可能パッケージv110とv140の両方にdllを含めました。私はこれが可能かどうかは分かりませんが、ソースコードはうまくコンパイルされています。

これは

私の質問があり、非常に痛みを伴うことになるので、私は、これらの* .LIBSの除去テストしていません:

  1. は、有効な私の仮説ですか?
  2. 誰もこれを解決する方法を知っていますか?
+0

このように:https://stackoverflow.com/questions/33659878/visual-studio-2015-v120-vs-v140 – guilhermecgs

答えて

0

私は自分自身で答えを見つけました。 simulinkはqtを内部的に使います。だから、私のカスタムアプリケーションからのDLLは、Simulink QT dllと競合しています。どちらも同じ名前ですが、simulinkはQTのわずかに異なるバージョンを使用しています。

QTは、同じメジャーバージョンを使用すると、下位互換性があると述べています...しかし、少なくともmatlab環境ではそうではありません。