我试图用mex(MacOSX Lion上的MATLAB 2012b)编译一个C文件。我的项目由三个文件组成:
定义主要功能的头文件,smdvquad.h
smdvquad.h的C实现,即smdvquad.c,它包括smdvquad.h和
一个包含“mexFunction”的C文件,即mxsmdvquad.c,它包含smdvquad.h
整个项目在Netbeans上编译得非常好,但是当我尝试在MATLAB上使用mex编译它时,即使用以下命令:

mex -largeArrayDims mxsmdvquad.c

引发以下错误:
>> mex -largeArrayDims mxsmdvquad.c
Undefined symbols for architecture x86_64:
  "_smdv_quad", referenced from:
      _mexFunction in mxsmdvquad.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

    mex: link of ' "mxsmdvquad.mexmaci64"' failed.

Error using mex (line 206)
Unable to complete successfully.

我还尝试使用-I mex参数指定工作目录,即。
mex -largeArrayDims -I/path/to/my/project/ mxsmdvquad.c

但是徒劳!

最佳答案

我希望以下其中一项能起作用:
也许你还需要编译smdvquad.c

mex -largeArrayDims mxsmdvquad.c smdvquad.c

或者,如果已经编译了smdvquad,则可能需要链接它:
mex -largeArrayDims mxsmdvquad.c smdvquad.o

或者如果它在另一个目录中,则需要使用-L将该目录添加到链接器中:
mex -largeArrayDims -L/path/to/project mxsmdvquad.c smdvquad.o

10-08 13:42