For linux:
因为 matlab 对 gcc 的版本敏感。
参见 gcc 版本问题 一文。
修改
/opt/matlab/bin/gccopts.sh
找到对应 Arch
修改如下变量
GCC_LIBDIR
CC
CXX
FC
如要 c, fortran 混编,需要在 lib 中加入 -lg2c,这个库使得c能调用 fortran 编译得到的object.
修改后,别忘了再次执行
mex -setup
以下是一个例子,对于不同 Matlab 版本可能不一样。
GCC_LIBDIR=`gcc34 -v 2>&1 | awk '/.*Reading specs.*/ {print substr($4,0,length($4)-6)}'` ;; glnx86) #---------------------------------------------------------------------------- RPATH="-Wl,-rpath-link,$TMW_ROOT/bin/$Arch" CC='gcc34' CFLAGS='-fPIC -ansi -D_GNU_SOURCE -pthread -fexceptions -m32' CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64" CLIBS="$RPATH $MLIBS -lm -lstdc++ -lg2c" COPTIMFLAGS='-O -DNDEBUG' CDEBUGFLAGS='-g' # CXX='g++34' CXXFLAGS='-fPIC -ansi -D_GNU_SOURCE -pthread ' CXXFLAGS="$CXXFLAGS -D_FILE_OFFSET_BITS=64" CXXLIBS="$RPATH $MLIBS -lm" CXXOPTIMFLAGS='-O -DNDEBUG' CXXDEBUGFLAGS='-g' # # FC='g77' FFLAGS='-fPIC -fexceptions' FLIBS="$RPATH $MLIBS -lm" FOPTIMFLAGS='-O' FDEBUGFLAGS='-g' # LD="$COMPILER" LDEXTENSION='.mexglx' LDFLAGS="-pthread -shared -m32 -Wl,--version-script,$TMW_ROOT/extern/lib/$Arch/$MAPFILE -Wl,--no-undefined" LDOPTIMFLAGS='-O' LDDEBUGFLAGS='-g' # POSTLINK_CMDS=':' #---------------------------------------------------------------------------- ;; glnxa64)
编译 fortran
unix 中可以使用
mex -fortran foo.f
For windows:
若使用 gnumex
matlab 中
>> gnumex
选择编译器,生成mexopts.sh,并修改这个文件。
编译命令例子
mex -c -cxx arrayofmatrices.cpp mex -c -cxx matlabexception.cpp mex -c -cxx matlabprogram.cpp mex -c -cxx matlabstring.cpp mex -c -cxx lbfgsb.cpp mex -c -cxx matlabmatrix.cpp mex -c -cxx matlabscalar.cpp mex -c -cxx program.cpp mex -c -fortran solver.f mex -output lbfgsb arrayofmatrices.o matlabexception.o matlabprogram.o matlabstring.o solver.o lbfgsb.o matlabmatrix.o matlabscalar.o program.o
A tutorial that may help.
0 comments:
Post a Comment