Я уже несколько дней пытаюсь скомпилировать определенный код, написанный на fortran90 и C. Я использую gfortran и gcc. Код должен быть связан с библиотеками lapack, blas и fftw3. У меня все три установлены в моем macbook pro. Но когда я запускаю скрипт configure, по какой-то причине он не может найти библиотеки fftw3.
Вот моя строка конфигурации:
./configure --prefix=`pwd` --with-fft=fftw3 \
--with-fft-lib='-I/opt/local/include -L/opt/local/lib -lfftw3 -lm' \
--with-blas='-I/opt/local -L/opt/local -lblas' \
--with-lapack='-I/opt/local -L/opt/local -llapack' \
FCFLAGS='-O3 -m64'
Я использовал точно такую же линию связи для lapack, blas и fftw3. Configure может найти lapack и blas, но не может связать fftw3. Кто-нибудь знает, что здесь происходит? Буду признателен за любую помощь.
Спасибо, kopinjol
Всем привет,
Прежде всего, спасибо Христо Илиеву за ваши ответы ранее. Я смог решить эту проблему, связав библиотеки. Вы были правы насчет использования разных компиляторов для библиотек и основного кода. В этом была проблема. И когда я скомпилировал их одним и тем же компилятором, проблема с линковкой исчезла. Но теперь у меня другая проблема.
В коде есть такой вызов функции:
call io_open(info_files(n_files)%unit,trim(dir)//"/info")
Функция io_open
определяется следующим образом:
subroutine io_open(unit, file, status, form)
integer, intent(out) :: unit
character(len=*), intent(in) :: file
character(len=*), intent(in), optional :: status, form
integer :: iostat
character(len=20) :: status_, form_
Ошибка, которую я получаю, заключается в следующем:
call io_open(info_files(n_files)%unit, trim(dir)
1
Error: Syntax error in argument list at (1)
В основном кажется, что код дает синтаксическую ошибку в
trim(dir)//"/info"
которое является именем файла в вызове функции.
Теперь код компилируется без каких-либо проблем в Linux (я использовал ubuntu, самую последнюю версию). Я получаю сообщение об ошибке только на своем MacBook Pro с OSX 10.6.
Также удивительно, что код компилируется, когда я определяю дополнительную переменную fname
как
fname=trim(dir)//"/info"
а затем использовать его для вызова функции
call io_open(info_files(n_files)%unit,fname)
Теперь я могу сделать замену во всех вызовах функций в коде, которых довольно много, и мне, вероятно, потребуется несколько часов, чтобы внести изменения вручную. Но как-то нелогично, что один и тот же код с одними и теми же компиляторами компилируется без ошибок в Linux, но не работает в Mac. Кто-нибудь знает, что может быть не так? Я буду признателен за любой вклад.
Заранее спасибо,
kopinjol
configure
создает файл журнала (обычно) с именемconfig.log
. Выполните поиск, чтобы увидеть, как именноconfigure
пытается проверить доступность FFTW и как именно тест терпит неудачу. - person Hristo Iliev   schedule 27.06.2012gfortran
у вас есть на компьютерах с OS X и Ubuntu? - person Hristo Iliev   schedule 06.07.2012