2013-06-19 2 views
0

최근까지 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을 정의했다.

+0

또한이 파일은 고유하지 않으며 내 osx 컴퓨터에만 영향을주는 것으로 보입니다. 나는 다른 많은 올바른 소스 파일을 동일한 오류를 찾기 위해 시도하고 Windows에서 잘 컴파일 할 수 있습니다. – muxu526

+0

'mexopts.sh' 파일을 재 작성하기 위해'mex -setup'을 다시 실행하고 모든 로컬 버전을 삭제하는 방법에 대해 설명합니다. 나는 Mac을 소유하고 있지 않으므로이 문제가 있는지 잘 모르겠지만 시스템에 호환 가능한 컴파일러가 있는지 확인하십시오. http://www.mathworks.com/support/compilers/R2013a/index.html?sec=maci64 – Amro

답변

0

내가 암로, 내가 주석으로이 되었는데요 올바른 생각하지만, 그것이 약간 큰, 난 clang command line options to select target CPU

Registered Targets: 
alpha - Alpha [experimental] 
arm  - ARM 
bfin  - Analog Devices Blackfin [experimental] 
c  - C backend ... ... 
mblaze - MBlaze 
mips  - Mips ... 
msp430 - MSP430 [experimental] ... 
thumb - Thumb 
x86  - 32-bit X86: Pentium-Pro and above 
x86-64 - 64-bit X86: EM64T and AMD64 
xcore - XCoreI'm thinking Amro is correct: 

이 찾을 그래서 오히려 오른쪽 명령 줄 스위치 -arch x86-64입니다 x86_64

+0

이어야합니다. 나는 xcode 4.6을 실행하고 있고, 나의 CPU는 모래 다리 i7이다. – muxu526

+0

죄송합니다. x86_64 대신 x86_64를 사용합니다. – macduff

+0

보통 이러한 것들을 수동으로 편집해서는 안되며, mex -setup은 올바른 플래그를 알아 내기로되어 있습니다 (지원되는 컴파일러를 선택한 경우). 문제는 'clang'이 지원되는지 아니면 'gcc'가 필요한지 여부입니다. Xcode에 기본적으로 clang이 포함되어 있다고 들었습니다. – Amro

관련 문제