Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [Tools] Модули как линкуются и др вопросы


Автор: marcusmae 10.10.2008, 00:56
Всем привет,

Fedora Core 9 (linux)
gfortran, g++

Я тут повертел-повертел и пришёл к выводу, что совершенно не понимаю, что в процессе компиляции происходит с файлами модулей (.mod). Допустим, имеется многопакетный проект, в котором каждый пакет компилится в объекты и собирается в отдельную статическую библиотеку .a-архиватором. Стандартная схема. А дальше-то что? Если посмотреть на библиотеку утилитой nm, то она показывает, что все модульные символы undefined. Логично, что при попытке слинковать библиотеку с экзешником, радостно вывалится куча неразрешённых зависимостей. Видимо, компилятор поместил все символы модулей в mod-файлы. Как вот их оттуда задействовать теперь? Вопрос в отношении не чисто фортранного проекта, а многоязыкового, пусть, например, экзешник и некоторые пакеты написаны на C++. Можно где-нибудь увидеть пример скрипта или make-файла для такого случая?

Спасибо.

Автор: popovda 2.11.2008, 11:36
Никогда не сталкивался с Вашей проблемой. Но gfortran настоятельно не рекомендую. Из свободных g95 стабильнее. BIND ( С ) не пробовали? Это стандартный модуль iso_c_binding. Я для связки с C/C++ им пользовался и весьма успешно.

Автор: marcusmae 2.11.2008, 15:52
popovda, привествую, спасибо за ответ,

Проблема была решена давно, зря я не отписался. На самом деле, неразрешённость символов была спровоцирована другим - я забыл слинковать к плюсовому бинарнику библиотеку стандартных функций фортрана.

Цитата(popovda @  2.11.2008,  11:36 Найти цитируемый пост)
Из свободных g95 стабильнее.

На кластере выбор только между gfortran или ifort. В итоге сделал, что работает и с тем, и с другим.

Байндинг на самом деле не нужен в большинстве случаев, всё неплохо работает напрямую.

Про модули вот какой интересный факт: символы, определённые в модулях с точки зрения готового исполняемого образа - это глобальные переменные с именами вида <имя_модуля>_<имя_символа> smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)