Xcode Matlab&;代码5:;叮当声:链接失败;

Xcode Matlab&;代码5:;叮当声:链接失败;,xcode,macos,matlab,Xcode,Macos,Matlab,我已尝试使用Xcode 5在MacBook Pro OS X 10.9上安装。 当我测试nfft包时,我必须使用以下命令编译一个.c文件: fftw3Path='/Users/boyer/Documents/MATLAB/fftw-3.3.4/'; nfft3Path='/Users/boyer/Documents/MATLAB/nfft-3.2.3/'; Ipath=[' -I' nfft3Path 'include ' ' -I' nfft3Path 'applications/fastsu

我已尝试使用Xcode 5在MacBook Pro OS X 10.9上安装。 当我测试nfft包时,我必须使用以下命令编译一个.c文件:

fftw3Path='/Users/boyer/Documents/MATLAB/fftw-3.3.4/';
nfft3Path='/Users/boyer/Documents/MATLAB/nfft-3.2.3/';
Ipath=[' -I' nfft3Path 'include ' ' -I' nfft3Path 'applications/fastsum ' '-I' fftw3Path 'api ' '-I' nfft3Path 'matlab ' ];
Lpath=['-L' nfft3Path ' ' '-L' nfft3Path 'applications/fastsum' ' ' '-L' fftw3Path 'api' ];
command=sprintf(['mex -v -Dchar16_t=uint16_t ' Lpath ' ' Ipath ' -lfftw3 -lnfft3 nfftmex.c']);
eval(command)
以下是我得到的答案:

使用'Xcode with Clang'构建。
/usr/bin/xcrun-sdk macosx10.8 clang-c-Dchar16_t=uint16_t-DMX_COMPAT_32-DMATLAB_MEX_文件-I/Users/boyer/Documents/MATLAB/nfft-3.2.3/include-I/Users/boyer/Documents/MATLAB/nfft-3.2.3/applications/fastsum-I/Users/boyer/Documents/MATLAB/nfft-3.2.3/MATLAB-I“/Applications/MATLAB_R2014a.app/extern/include”-I”/Applications/MATLAB_R2014a.app/simulink/include“-fno common-arch x86_64-mmacosx version min=10.8-fexceptions-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk-O2-DNDEBUG/Users/boyer/Documents/MATLAB/nfft-3.2.3/MATLAB/nfft/nfftmex.c-o/var/folders/_0/63lwd17j94w\u 7wgkrw300000gn/T///mex\u 2747777805296\nfx.460
/usr/bin/xcrun-sdk macosx10.8 clang-Wl,-two-level_名称空间-未定义错误-arch x86_64-mmacosx version min=10.8-Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/macosx10.8.sdk-bundle-Wl,-导出的符号列表,“/Applications/MATLAB_R2014a.app/extern/lib/maci64/mexFunction.map”/var/folders/\u 0/63lwd1z17j94w\u 7WGKRW3X7000GN/T//mex\u 274778005296\u 34460/nfftmex.o-o-Wl,-导出的符号列表,“/Applications/MATLAB\u R2014a.app/extern/lib/maci64/mexFunction.map”-lfftw3-lnfft3-L/Users/boyer/Documents/MATLAB/nfft-3.2.3/-L/Users/boyer/Documents/MATLAB/nfft-3.2.3/applications/fastsum-L/Users/boyer/Documents/MATLAB/fftw-3.3.4/api-L”/applications/MATLAB_R2014a.app/bin/maci64“-lmx-lmex-lmat-lstdc++-o nfftmex.me64
使用mex时出错
架构x86_64的未定义符号:
“\u nfft\u mex\u get\u int”,引用自:
_nfftmex.o中的mex函数
“\u nfft\u mex\u install\u mem\u hooks”,引用自:
_nfftmex.o中的mex函数
ld:找不到架构x86_64的符号
叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

使用MatlabR2011b,我将mexopts.sh文件更改如下:

我还尝试通过-std=libstdc++更改库-lstdc++。什么也解决不了问题

然后我使用了MatlabR2014a,我也有同样的错误(但是在这个版本中,我们不能修改mexopts.sh,它似乎已经被mex_C_maci64.xml所取代)

我想也许我会安装另一个c编译器,这太糟糕了,因为至少MatlabR2014a应该与Xcode5兼容


如果您有任何建议,请提前感谢。

我讨厌在OSX上安装软件时把头撞到砖墙上,所以我使用
自制
来处理ImageMagick、GNU coreutils、gawk、sed、ffmpeg、gnuplot、GNU parallel、REDIS、opencv、jhead、p7zip等

对于
nfft
,似乎有一个公式,因此我想您所需要做的就是按照简单的单行指令安装
homebrew
。然后,您可以将
点击
进入存储库的science分支,然后安装
nfft
,如下所示:

brew tap homebrew/science
brew install nfft
你完了!如果有任何问题,请运行

brew doctor

谢谢你的帮助和有用的建议。现在,在安装nfft包时(在make和make install之前),它似乎可以通过应用以下命令来工作:

另一条评论:即使OSX的版本是10.9,matlab也会选择10.8sdk。为了避免这种情况,您可以编辑文件mex_C_maci64.xml,并反转两行代码:

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.9.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.8.sdk" />

而不是

<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.8.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.9.sdk" />

结束

希望它能帮助别人。再次感谢您的回答

./configure --with-fftw3='/usr/local' --with-fftw3-libdir='/usr/local/lib' --with-fftw3-includedir='/usr/local/include' --with-matlab='/Applications/MATLAB_R2014a.app' --with-matlab-fftw3-libdir='/usr/local/lib'
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.9.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.8.sdk" />
<dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk" />
                  <dirExists name="$$/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.7.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.8.sdk" />
                  <cmdReturns name="find $$ -name MacOSX10.9.sdk" />