Использование модуля Fortran90 в приложении C / C ++

У меня есть исходный файл большого модуля, написанного на fortran90 с некоторыми определениями типов, некоторыми интерфейсами, некоторыми функциями и подпрограммами. Я могу скомпилировать и использовать его в обычном fortran программа.

Но так как я всегда использовал C/C++ и я не знаю так много fortran Я хотел бы использовать этот модуль внутри C/C++ программа. Это использует его типы данных и вызывает их функции / подпрограммы.

Является ли это возможным? Как я могу это сделать? Какие шаги я должен достичь? Есть ли исчерпывающие учебники в Интернете (я не нашел так много с кратким поиском в Google ..)

0

Решение

В Fortran 2003 добавлены специальные условия для взаимодействия с C. Вы можете найти изношенный в GCC документы. Если, однако, ваш код на Fortran не использует эти функции (как, впрочем, и возможно), и вы не готовы изменить его, чтобы сделать это, то ответ сильно зависит от цепочек инструментов Fortran и C. Некоторые проблемы включают в себя

  • искажение имени. Многие компиляторы Фортрана неявно добавляют одно или несколько подчеркиваний к объявленным именам функций, и большинство преобразователей идентифицирует их либо в строчные, либо в строчные
  • индексация массива. Индексы массивов Fortran начинаются с 1 (по умолчанию), а многомерные массивы индексируются в порядке, противоположном тому, который используется C.
  • строковые аргументы. Фортран имеет строки с явной длиной. То, как они представлены в списке аргументов функции, зависит от компилятора. Большинство используют char * и передать длину в качестве отдельного аргумента, но были использованы другие меры. Кроме того, аргумент длины может следовать сразу после указателя или может добавляться в конец списка аргументов.
  • строки в общем. Фортран имеет строки с явной длиной. Позиции после конца действительных данных должны быть заполнены пробелами.
  • указатели. Фортран 95 не имеет сырых указателей. У него есть что-то, называемое указателем, но оно не является прямым аналогом указателя на Си.
  • скалярные типы данных. Отображение из типов данных C, таких как int а также double Типы данных Fortran зависят в некоторой степени от используемых компиляторов. Не гарантируется, что все типы, предоставляемые одним компилятором, имеют аналогичные типы среди типов, известных другому компилятору.
  • пользовательские типы. Без функций взаимодействия C трудно гарантировать, что компоновка пользовательских типов будет одинаковой, даже если вы сможете правильно сопоставить типы компонентов.
  • соглашения о передаче аргументов. В дополнение к тому факту, что Fortran использует вызов по ссылке, Fortran 90 предоставляет режимы передачи массивов, которые не отображаются ни на что в C. Не все функции используют эти режимы для передачи массивов, но вы вряд ли сможете это сделать. вызывать функции, которые это делают (они даже не поддерживаются функциями взаимодействия C в F03).
  • не смешивайте внешний ввод-вывод Fortran с внешним вводом-выводом C Трудно получить права.
  • вам, вероятно, понадобится связать библиотеку времени исполнения Fortran. Его имя варьируется от компилятора к компилятору.

Это не исчерпывающий список, но он охватывает большинство общих проблем. С какими из них вам нужно иметь дело, зависит от пакетов, которые вы пытаетесь подключить.

До F03 взаимодействие с Fortran / C, как правило, предоставлялось для каждого продукта в отдельности, в зависимости от набора инструментов. Часто набор специфических интерфейсных функций предоставлялся на одной или другой стороне, или на обеих. Существует еще много такого кода, и это может быть хорошей стратегией и для вас. Также есть инструменты, которые пытаются помочь разобраться в беспорядке. Например, в GNU Autotools есть некоторая поддержка, охватывающая гораздо больше, чем просто набор инструментов GNU. В качестве альтернативы вам может понадобиться проверить некоторые объектные файлы, чтобы определить, как решить некоторые из этих проблем.

4

Другие решения

Поиск позвони фортрану из с дал мне несколько ссылок на различные учебные пособия и примеры.

Некоторые основные моменты:

Фортран звонки по ссылке, так что вы часто используете указатели / оператор адреса.

Подпрограммы на Фортране обычно экспортируются с простым искажением имен. Вы можете узнать это, прочитав руководство, или вы можете использовать nm f.oгде f.o — это скомпилированный файл на Фортране.

Используя полученные имена подпрограмм, вам нужно создать файл заголовка C с объявлениями для подпрограмм, которые вы хотите вызвать.

При связывании вам нужно связать с библиотекой Фортран, -l<name of fortran lib>,

0

По вопросам рекламы [email protected]