Matlab versionは2007a(7.4.0)

eeglab7_1_6_18b
eeglab8_0_3_4b
で検証

OSはWinXP 64bit

タイトルにあるようにMEXファイルがみつからない的なことを言われます.
この問題は極単純ですがいろんなところの問題がこんがらがっているのでややこしかったです.

詳しく書いておいていつか何かの足しになれば.

まずEEGLABでdipfitをやろうとすると出ました.
以前に
Mex File のコンパイル
と題してWindows 64bit環境でdipfitをやろうとするときの注意点を書きました.

これに付随してまた新たに問題が出たのが今回の報告.
EEGLAB bugzillaでも問題になっているので,
以下の記述中の言葉で適当に検索すれば出てきます.

EEGLAB error in function ptriproj()@ line 29
ERROR using ==> ptriproj at 29 could not locate MEX for ptriproj

ここで問題になっているMEXファイルはfieldtripの関数なので,
 ここのページ
が紹介されたりして, 以前の記事のようにコンパイルのやり方が示されています.
つまりコンパイルされた適切なファイルがないと,
あらかじめ用意されたmファイルを読みに行く形になっていて
そこに記述されているエラーメッセージが返されるということです.

しかし今回はコンパイル作業を完璧にこなしてもエラーが出続けました.
前回もコンパイルだけではダメで,
コンパイルした.mexw64ファイル群をより階層が上のフォルダに入れて,
.mexw32との競合を避ける必要がありました.

今回もそれだろうと,
・workフォルダ
・マイドキュメントのMATLABフォルダ
・そのときのカレントフォルダ
とさまざま上位階層と思われるところに入れてみましたがダメ.

何か別のパスと競合しているんじゃないかと思って,
MATLAB上のパスを一回全部消して,設定しなおしてみてもダメ.

古いバージョンで使っていたfieldtrip-liteを別から持ってきて,
そっちを読みにいくようにしてもダメ.

とお手上げな感じでした.
バタバタ色々やっていてやっと動いたのが,
非常に基本的な問題でした.
eeglabのパス設定です.

普段私はeeglabを立ち上げていない状態でも
eeglabの関数を利用したりするので 基本「サブフォルダも追加」でeeglabのフォルダ以下 全てのフォルダをMATLABに登録しています. それがまずいみたいですね.
eeglabは 「eeglab」とタイプして立ち上げを行ったとき, スタートアップで自分の使うフォルダを自分で設定しなおします. つまりeeglabを使うには,eeglabの最上位のフォルダのみを MATLABにパス登録しておけばきちんと動くようになっているのです. 逆に言うとそうやって作られているので 「サブフォルダも追加」で全部登録されてしまうと 困る仕様になっているということです. 今回のMEXが見つからないバグも, この二重登録が混乱を生じて起こったようで, パスを最上位のみにしたら直りました.

直接どこが競合したか突き止めていませんが, とにかくパス全部登録はダメらしい. 特にMEXを使って処理するもので, パス階層の順位で読むファイルが変わるような時には 注意する必要がありそうです. 関数を使いたいときはその都度パスを通すか, 逆にdipfitをやるときなどに限ってパスを外すかなど, で対処しなくてはならない,ということみたいです.