0

最近まで、Mac osx 10.8.4 で mex 関数を正常にコンパイルできましたが、現在は次のようなエラーが表示されます (便宜上、-v 呼び出し全体を含めました)。

**************************************************************************
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 コンパイラが正しいバージョンを使用していることを確認しました。コードが x86_64 アーキテクチャ用にネイティブにコンパイルされていることを確認するためだけに、以前に g++ を使用して cpp ファイルをコンパイルしていました。ただし、me​​x コンパイラを使用してコンパイルとリンクを実行しようとすると、同じ結果が発生します。ここで何が起こっているのかについてのアイデアはありますか? 人々は以前にこの問題を抱えていたようですが、ほとんどの場合、ライブラリまたは定義が欠落しています。ソース ファイルで mexFunction を確実に定義しました。

4

1 に答える 1

0

私は Amro が正しいと思います。これをコメントとして入れますが、少し大きいです。clang コマンド ライン オプションでターゲット 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

于 2013-06-19T20:29:57.753 に答える