Связывание предустановленных библиотек из gfortran в Mac OSx 10.6

Я уже несколько дней пытаюсь скомпилировать определенный код, написанный на 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


person user1484503    schedule 27.06.2012    source источник
comment
configure создает файл журнала (обычно) с именем config.log. Выполните поиск, чтобы увидеть, как именно configure пытается проверить доступность FFTW и как именно тест терпит неудачу.   -  person Hristo Iliev    schedule 27.06.2012
comment
Привет Христо Илиев, Спасибо за ответ. Я просмотрел файл config.log и вот что получил: L/opt/local/lib -lfftw3 -lfftw3f ›&5 Неопределенные символы для архитектуры x86_64: dfftw_plan_dft_1d, на которые ссылается:_main в ccmkBOaT.old: символы не найдены для архитектуры x86_64 collect2: ld вернул 1 статус выхода. настроить: 6334: $? = 1 настроить: неудавшаяся программа была: | программа главная | вызов dfftw_plan_dft_1d | конец   -  person user1484503    schedule 30.06.2012
comment
Похоже, у вас есть только 32-разрядная версия FFTW, в то время как вы пытаетесь создать 64-разрядную версию кода.   -  person Hristo Iliev    schedule 30.06.2012
comment
Спасибо за ваши ответы. Я только что обновил свой вопрос. Что-то еще происходит с кодом. Мне было интересно, есть ли у вас какие-либо идеи.   -  person user1484503    schedule 06.07.2012
comment
Какие версии gfortran у вас есть на компьютерах с OS X и Ubuntu?   -  person Hristo Iliev    schedule 06.07.2012


Ответы (1)


Спасибо за ответ Христо Илиев. Я только что понял проблему. Проблема была в том, что я использовал разные версии одного и того же компилятора. Как только я обновил переменные среды компиляторами той же версии, все заработало.

Это то, что я сделал,

export FC="gfortran-mp-4.6 -m64"
export F77="gfortran-mp-4.6 -m64"
export F90="gfortran-mp-4.6 -m64"
export CC="gcc-mp-4.6 -m64"
export CXX="g++-mp-4.6 -m64"
export CPP="cpp-mp-4.6 -m64 -C -ansi"
export FCCPP="cpp-mp-4.6 -m64 -C -ansi"
export FCFLAGS="-O3"
export FFLAGS="-O3"

Как поясняется в списке рассылки APE.

Спасибо еще раз,

копиньол

person user1484503    schedule 06.07.2012