OS X Lion, Matlab 2011a, Mex: неопределенные символы для архитектуры x86_64 - PullRequest
0 голосов
/ 06 сентября 2011

Hello Fellow Matlab / OS X Пользователи,

Мне было интересно, можете ли вы помочь мне еще раз. Я получил здесь c-файл (st.c, частотно-временной анализ Stockwell для MEG-Data) для 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) работает без проблем.) Погуглив, я не смог найти много, но кто-то предложил следующее:

Для MATLAB необходимо 64-битное соединение (x86_64). Вам нужно найти рабочую 64-битный компилятор gfortran, чьи библиотеки являются 64-битными и ABI-совместимый с Apple gcc.

Здесь http://r.research.att.com/tools/ Я нашел GNU Fortran 4.2.4 для Mac OS X 10.7. Но это ничего не изменило, ошибка остается прежней.

Я предполагаю, что архитектура скомпилирована неверно, но я не знаю, как это изменить для Matlab / Xcode. Если это так, может кто-нибудь сказать мне, как это сделать?

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 07 сентября 2011

Вам необходимо создать ссылку на библиотеку fftw. Вы можете передать флаги компоновщика непосредственно в команду mex. Таким образом, вы, вероятно, хотите выполнить команду вроде:

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

Опция -v переведет mex в подробный режим и выведет команды gcc, используемые для компиляции и связывания файла mex. Этот вывод полезен для отладки проблем со связыванием

...