mexFunction引用外部头文件

时间:2013-01-29 22:25:28

标签: c matlab mex

我正在尝试使用mex编译一个C文件(MacOSX Lion上的MATLAB 2012b)。我的项目包含三个文件:

  1. 定义主要功能的页眉文件smdvquad.h
  2. smdvquad.h的C实现,即smdvquad.c,其中#include smdvquad.h和
  3. 包含“mexFunction”的C文件,即mxsmdvquad.c,其中#include smdvquad.h
  4. 整个项目在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-argument指定工作目录,即

    mex -largeArrayDims -I/path/to/my/project/ mxsmdvquad.c
    

    但徒劳无功!

1 个答案:

答案 0 :(得分:2)

我希望以下其中一项能够奏效:

也许您还需要编译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