2011-09-06 21 views
0

您好研究員基於Matlab/OS X用戶,OS X Lion中,MATLAB 2011A,墨西哥:未定義的符號體系結構x86_64的

我在想,如果你能幫助我再次。 我在這裏爲Matlab編譯了一個用於我的系統(OS X Lion,Xcode 4.1.1)的c文件(st.c,用於MEG-Data的Stockwell時頻分析)。 它包括

#include <fftw3.h> 

所以我從http://www.fftw.org/下載最新版本並編譯它。 目前爲止這麼好。但是,如果我試圖編譯C文件

mex -st.c 

我得到以下錯誤:

-> gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011a.app/extern/lib/maci64/mexFunction.map -o "st.mexmaci64" st.o -L/Applications/MATLAB_R2011a.app/bin/maci64 -lmx -lmex -lmat -lstdc++ 
Undefined symbols for architecture x86_64: 
    "_fftw_destroy_plan", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_free", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_malloc", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_import_wisdom_from_file", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_plan_dft_1d", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_export_wisdom_to_file", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_fftw_execute", referenced from: 
     _ist in st.o 
     _st in st.o 
    "_mexFunction", referenced from: 
    -exported_symbol[s_list] command line option 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

    mex: link of ' "st.mexmaci64"' failed. 

(我應該說,從MATLAB例子編譯C-文件(yprime.c)的作品,而不。任何問題) 谷歌搜索我不可能找到了,但有一個人提示如下:

MATLAB needs to link 64-bit (x86_64). You'll need to find a working 64-bit gfortran compiler whose libraries are 64-bit and ABI-compatible with Apple's gcc.

這裏http://r.research.att.com/tools/我發現GNU的Fortran 4.2.4適用於Mac OS X 10.7。 但這並沒有改變任何東西,錯誤仍然是一樣的。

我猜這個架構是以錯誤的方式編譯的,但我不知道如何改變Matlab/Xcode。如果是這樣的話,有人可以告訴我該怎麼做嗎?

感謝您的幫助

+2

看起來您沒有爲x86_64編譯FFTW,或者它沒有與您的程序鏈接。你可以檢查嗎? – 2011-09-06 15:07:59

+0

我把fft3w.h&fft3w.f放到matlabroot/extern/include中 如果我把它拿出來,出現下面的錯誤信息:'fftw3.h:沒有這樣的文件或目錄'。 我對mex和gcc不是很熟悉,這是檢查它是否以正確方式編譯和鏈接的最佳方法? – Irreducible

+0

我對FFTW,Fortran和MATLAB都不熟悉,呵呵。也就是說,它看起來像'mex'調用'gcc'時沒有通過FFTW庫 - 至少我無法在'gcc'行識別它。或者,也許是這樣,但FFTW並沒有爲x86_64編譯。如果您有一個FFTW庫(可能帶有.o,.a或.dylib擴展名),請對其運行'lipo -info',它會告訴您已編譯的體系結構。 – 2011-09-06 18:29:59

回答

0

您需要鏈接到fftw庫。您可以將鏈接器標誌直接傳遞給mex命令。所以,你可能要像發出命令:

>> mex -v -I/path/to/fftw/include -L/path/to/fftw/lib/ -lfftw3 st.c 

-v選項將使mex到冗長模式下,會打印出用於編譯和鏈接MEX文件gcc命令。此輸出對調試鏈接問題很有幫助

+0

現在我得到這個錯誤: 'gcc-4.2 -O -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/ Developer/SDKs/MacOSX10.6.sdk -mmacosx-version -min = 10.5 - bundle -Wl,-exported_symbols_list,/ Applications/MATLAB_R2011a.app/extern/lib/maci64/mexFunction.map -o「st.mexmaci64」st.o -L/usr/local/lib/-lfftw3 -L/Applications/MATLAB_R2011a 。應用程序/ bin中/ maci64 -lmx -lmex -lmat -lstdC++ 爲架構x86_64的未定義符號: 「_mexFunction」,從引用: -exported_symbol [s_list]命令行選項 LD:符號(多個)未找到架構x86_64的' – Irreducible

+1

我在這裏找到[鏈接](http://stackoverflow.com/questions/2188658/shared-library-locations-for-matlab-mex-files)一個答案,讓我編譯我的c文件: 'mex CFLAGS = '-I/usr/local/lib'LDFLAGS =' - t/u sr/local/lib/libfftw3.a -lz -bundle'st.c -v' – Irreducible

+0

你能解決問題不可簡化嗎? – codehippo

相關問題