Здравствуйте, пользователи Matlab / OS X,
Мне было интересно, можете ли вы мне еще раз помочь. У меня есть c-файл (st.c, частотно-временной анализ Стоквелла для MEG-данных) для Matlab, который я должен скомпилировать для своей системы (OS X Lion, Xcode 4.1.1). Это включает в себя
#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.
(Я должен сказать, что компиляция c-файла из примера Matlab (yprime.c) работает без каких-либо проблем.) Пользуясь поиском в Google, я не нашел многого, но кто-то предложил следующее:
MATLAB необходимо связать 64-разрядную версию (x86_64). Вам нужно будет найти работающий 64-битный компилятор gfortran, библиотеки которого являются 64-битными и совместимы с ABI с gcc от Apple.
Здесь http://r.research.att.com/tools/ я нашел GNU Fortran 4.2 .4 для Mac OS X 10.7. Но это ничего не изменило, ошибка осталась прежней.
Я предполагаю, что архитектура скомпилирована неправильно, но я понятия не имею, как это изменить для Matlab / Xcode. Если это так, может ли кто-нибудь сказать мне, как это сделать?
Спасибо за вашу помощь
fftw3.h: No such file or directory
. Я не очень знаком с mex и gcc, как лучше всего проверить, правильно ли он скомпилирован и связан? - person Irreducible   schedule 06.09.2011mex
вызываетgcc
, он не передает библиотеку FFTW - по крайней мере, я не могу определить это в этойgcc
строке. Или, может быть, это так, но FFTW не скомпилирован для x86_64. Если у вас есть библиотека FFTW (возможно, с расширениями .o, .a или .dylib), запуститеlipo -info
для нее, и она сообщит вам архитектуры, для которых она была скомпилирована. - person   schedule 06.09.2011Non-fat file: libfftw3.a is architecture: x86_64
- person Irreducible   schedule 06.09.2011mex
, что он должен связать этот файл libfftw3.a, поскольку он не отображается в этойgcc
строке. Он должен отображаться либо как есть, либо как-lfftw3
. - person   schedule 06.09.2011mex prog.c -I/path/include -L/path/lib/ -lfftw
. Вы можете проверить документацию страницы для получения более подробной информации. - person Amro   schedule 07.09.2011