Компиляция программы с использованием gfortran и библиотеки HDF-EOS2

У меня проблема с подключением библиотеки HDF-EOS к программе Fortran90. Я скомпилировал библиотеку из исходного кода в каталог, указанный в префиксе $. Моя простая команда компиляции:

gfortran -I$prefix/include -L$prefix/lib -Wl,-rpath -Wl,$prefix/lib -lhdfeos -lGctp -lmfhdf -ldf -lz -lsz -ljpeg tst.f90

При компиляции выдает следующую ошибку:

undefined reference to `gdopen_'

В программе, которую я не должен изменять, библиотека HDF-EOS используется через ключевое слово external, например

integer(kind=4), external :: gdopen

В библиотеке nm $ prefix / lib / libhdfeos.a | grep gdopen дает мне:

00000000000120c0 T gdopen

При компиляции с использованием -fno-underscoring я получаю совсем другую ошибку:

gfortran -fno-underscoring -I$prefix/include -L$prefix/lib -Wl,-rpath -Wl,$prefix/lib -lhdfeos -lGctp -lmfhdf -ldf -lz -lsz -ljpeg tst.f90

тогда ошибка:

undefined reference to `gdopen'

Кроме того, gfortran находит библиотеки, иначе будет жаловаться. Связана ли ошибка с подчеркиванием? Что еще можно попробовать? Я работаю на Fedora и gfortran версии 4.7.2.


person Andre    schedule 22.10.2014    source источник


Ответы (1)


Да, скорее всего, из-за подчеркивания.

Попробуйте скомпилировать с -fno-underscoring (https://gcc.gnu.org/onlinedocs/gfortran/Code-Gen-Options.html), но исправить это с помощью правильного bind(C) интерфейса было бы лучше.

Это руководство (Вы читали его перед тем, как пойти сюда? Очень легко найти даже для полного новичок в библиотеке, как я.) также заявляет, что вам следует использовать -fno-underscoring.

Продолжайте реализовывать все остальное, что рекомендует руководство, включая компиляцию с FC=$(HDF4_DIR)/bin/h4fc.

person Vladimir F    schedule 22.10.2014
comment
Я должен был упомянуть, что в вопросе я пробовал, но безуспешно, я соответствующим образом обновлю свой вопрос. - person Andre; 22.10.2014
comment
@Andre Кстати, gfortran находит библиотеки, иначе он будет жаловаться на ложь. - person Vladimir F; 22.10.2014
comment
Да, это не помогло мне, потом я двинулся дальше и в конце концов приехал сюда. Разве gfortran не должен жаловаться, если я использую -lhdfeos и он не может найти файл libhdfeos.a? - person Andre; 22.10.2014
comment
Компоновщик должен пожаловаться, но это будет после завершения компиляции gfortran. Но вы не указываете libhdfeos.a в своем примере, он также может использовать динамическую библиотеку. - person Vladimir F; 22.10.2014
comment
Хорошо, я думал, что делаю это, добавляя параметр -lhdfeos. - person Andre; 22.10.2014
comment
Да, был, но он также может связать динамическую версию библиотеки, если она существует. Однако это не должно сильно измениться. - person Vladimir F; 22.10.2014
comment
Я использовал этот пример FC = $ (HDF4_DIR) / bin / h4fc, чтобы придумать командную строку gfortran, это инструмент, который в основном дает вам правильную команду gfortran. - person Andre; 22.10.2014
comment
Rgr., В следующий раз было бы полезно более подробно описать в вопросе, что вы пробовали. - person Vladimir F; 22.10.2014