최근까지 Mac OS X에서 mex 함수를 잘 컴파일 할 수있었습니다. 10.8.4 하지만 이제는 다음과 같이 오류가 발생합니다 (편의상 전체 -v 호출을 포함 시켰습니다) :mexFunction 심볼을 찾지 못하는 mexFunction 심볼
**************************************************************************
Warning: Neither -compatibleArrayDims nor -largeArrayDims is selected.
Using -compatibleArrayDims. In the future, MATLAB will require
the use of -largeArrayDims and remove the -compatibleArrayDims
option. For more information, see:
http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-
api.html
**************************************************************************
-> mexopts.sh sourced from directory (DIR = .)
FILE = /Users/munanxu/Dropbox/Code/CUDA/mexThomasTDM/mexopts.sh
----------------------------------------------------------------
-> MATLAB = /Applications/MATLAB_R2013a.app
-> CC = xcrun -sdk macosx10.7 clang
-> CC flags:
CFLAGS = -fno-common -arch x86_64 -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOS
X10.7.sdk -mmacosx-version-min=10.7 -fexceptions
CDEBUGFLAGS = -g
COPTIMFLAGS = -O2 -DNDEBUG
CLIBS = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -
lstdc++
arguments = -DMX_COMPAT_32
-> CXX = xcrun -sdk macosx10.7 clang++
-> CXX flags:
CXXFLAGS = -fno-common -fexceptions -arch x86_64 -isysroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX
10.7.sdk -mmacosx-version-min=10.7
CXXDEBUGFLAGS = -g
CXXOPTIMFLAGS = -O2 -DNDEBUG
CXXLIBS = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -
lstdc++
arguments = -DMX_COMPAT_32
-> FC = gfortran
-> FC flags:
FFLAGS = -fexceptions -m64 -fbackslash
FDEBUGFLAGS = -g
FOPTIMFLAGS = -O
FLIBS = -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx -lmex -lmat -L
-lgfortran -L -lgfortranbegin
arguments = -DMX_COMPAT_32
-> LD = xcrun -sdk macosx10.7 clang
-> Link flags:
LDFLAGS = -arch x86_64 -Wl,-
syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/
SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -bundle -Wl,-
exported_symbols_list,/Applications/MATLAB_R2013a.app/extern/lib/maci64/mexFunction.map
LDDEBUGFLAGS = -g
LDOPTIMFLAGS = -O
LDEXTENSION = .mexmaci64
arguments =
-> LDCXX =
-> Link flags:
LDCXXFLAGS =
LDCXXDEBUGFLAGS =
LDCXXOPTIMFLAGS =
LDCXXEXTENSION =
arguments =
----------------------------------------------------------------
-> xcrun -sdk macosx10.7 clang -g -arch x86_64 -Wl,-
syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/
SDKs/MacOSX10.7.sdk -mmacosx-version-min=10.7 -bundle -Wl,-
exported_symbols_list,/Applications/MATLAB_R2013a.app/extern/lib/maci64/mexFunction.map -o
"inputsTest.mexmaci64" "inputsTest.o" -L/Applications/MATLAB_R2013a.app/bin/maci64 -lmx
-lmex -lmat -lstdc++
Undefined symbols for architecture x86_64:
"_mexFunction", referenced from:
-exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture x86_64
원래 mexopts.sh 파일을 mex 컴파일러가 올바른 버전을 사용하고 있는지 확인하기 위해 로컬 디렉토리에 복사했습니다. 이전에 g ++을 사용하여 cpp 파일을 컴파일했기 때문에 코드가 x86_64 아키텍처 용으로 기본적으로 컴파일되었는지 확인했습니다. 그러나 mex 컴파일러를 사용하여 컴파일 및 링크를 시도 할 때 동일한 결과가 발생합니다. 여기에 무슨 일이 일어날 지에 대한 아이디어가 있습니까? 사람들은 이전에이 문제를 겪었지만 대부분 누락 된 라이브러리 나 정의가있는 것 같습니다. 내 소스 파일에 mexFunction을 정의했다.
또한이 파일은 고유하지 않으며 내 osx 컴퓨터에만 영향을주는 것으로 보입니다. 나는 다른 많은 올바른 소스 파일을 동일한 오류를 찾기 위해 시도하고 Windows에서 잘 컴파일 할 수 있습니다. – muxu526
'mexopts.sh' 파일을 재 작성하기 위해'mex -setup'을 다시 실행하고 모든 로컬 버전을 삭제하는 방법에 대해 설명합니다. 나는 Mac을 소유하고 있지 않으므로이 문제가 있는지 잘 모르겠지만 시스템에 호환 가능한 컴파일러가 있는지 확인하십시오. http://www.mathworks.com/support/compilers/R2013a/index.html?sec=maci64 – Amro