matlabでmexを使った時のエラー
10年以上前に作成されたmatlabのscriptを動かすことを試みています。
versionの違いやfunctionの有無などで、いくつか問題はありましたが、何とか解決できたと思っています。しかし、最後まで解決できない問題があります。
matlab scriptから*cpp/*hで書かれたファイルのfunctionを呼び込むことができずに困っています。自分の理解では、matlab scriptからcppファイル(例えばAviReadMex.cpp)を呼ぶためには、mexというfunctionを使う必要があると思います。
そこで、
mex AviReadMex.cpp
を行ったところ、
以下のようなエラーが出てきました。
Building with 'MinGW64 Compiler (C++)'.
Error using mex
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0xeb): undefined reference to
`CVideo::CVideo()'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0xff): undefined reference to
`CVideo::OpenVideo(char const*)'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x10c): undefined reference to
`CVideo::GetCodec() const'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x133): undefined reference to
`CVideo::CloseVideo()'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x1a5): undefined reference to
`CVideo::GetHeight() const'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x1b4): undefined reference to
`CVideo::GetWidth() const'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x21b): undefined reference to
`CVideo::GetDataImage(unsigned char*, int) const'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x242): undefined reference to
`CVideo::CloseVideo()'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x24b): undefined reference to
`CVideo::~CVideo()'
C:\Users\AKIHIR~1\AppData\Local\Temp\mex_156313621567061_1472\AviReadMex.obj:AviReadMex.cpp:(.text+0x259): undefined reference to
`CVideo::~CVideo()'
collect2.exe: error: ld returned 1 exit status
AviReaderMex.cppには
CVideo AviVideo;
という行がありますので、ここが原因だと思いっています。
AviReaderMex.cppのlibraryを読みこむセクションには、
#include <mex.h>
#include "Video.h"
#define NUMBER_OF_FIELDS 2
です。
AviReaderMed.cppと同じfolderの中に、Video.cppとVideo.hもあります。
ちなみに、
mex Video.cpp
とやりますと、AviReaderMex.cpp内のfunctionが足りないとエラーが出ます。
一つ疑問に思うところは、そのfolderは"C:\Users\AKIHIR~1\AppData\Local\Temp"とは別のところに存在しているのに、なぜこのfolderが読み込まれているのかが理解できません。
どなたかエラーの原因の解決方法をお知りの方がおりましたら、ご教授をお願いします。
使用環境は、
OS: Windows10
Matlab version: R2017b
です。
よろしくお願いいたします。