У меня есть исходный файл большого модуля, написанного в fortran90
с некоторыми определениями типов, некоторыми интерфейсами, некоторыми функциями и подпрограммами. Я могу скомпилировать его и использовать его в обычной программе fortran
.
Но так как я всегда использовал C/C++
и я не знаю так много fortran
я бы хотел использовать этот модуль внутри программы C/C++
. Это использует свои типы данных и вызывает на нем свои функции/подпрограммы.
Является ли это возможным? Как я могу это сделать? Каковы различные шаги, которые я должен выполнить? Есть ли некоторые исчерпывающие учебные пособия в Интернете (я не нашел так много с кратким поиском google).
Fortran 2003 добавляет специальные положения, касающиеся взаимодействия с C. Вы можете найти краткое изложение в документации GCC. Однако, если ваш код Fortran не использует эти функции (как это, вероятно, не так), и вы не готовы его модифицировать, тогда ответ сильно зависит от ваших цепочек инструментов Fortran и C. Некоторые проблемы включают
char *
и передают длину в качестве отдельного аргумента, но используются другие механизмы. Кроме того, аргумент length может следовать сразу после указателя, или он может быть добавлен в конце списка аргументов.int
и double
для типов данных Fortran, несколько зависит от задействованных компиляторов. Не гарантируется, что все типы, предоставляемые одним компилятором, имеют аналогичные типы среди тех, которые известны другому компилятору.Это не исчерпывающий список, но он охватывает большинство распространенных проблем. Какие из них вам нужно решать, зависит от пакетов, которые вы пытаетесь подключить.
Ранее в F03 Interpop Fortran/C обычно предоставлялся по отдельности для каждого продукта по отдельности. Часто с одной стороны или с другой стороны был предоставлен набор специальных функций интерфейса или и то, и другое. Там по-прежнему существует такой код, и для вас это может быть хорошей стратегией. Кроме того, есть инструменты, которые пытаются помочь разобраться в беспорядке. У GNU Autotools есть определенная поддержка, например, охватывающая гораздо больше, чем просто инструментальная цепочка GNU. Кроме того, вам может потребоваться проверить некоторые объектные файлы, чтобы определить, как подойти к некоторым из этих проблем.
Поиск вызова fortran из c дал мне несколько ссылок на различные учебники и примеры.
Некоторые основные моменты:
Фортран звонки по ссылке, поэтому вы можете использовать указатели/адрес оператора.
Процедуры Fortran обычно экспортируются с помощью простого прошивки имен. Вы можете либо узнать, прочитав руководство, либо вы можете использовать nm fo
, где fo - скомпилированный fortran файл.
Используя полученные имена подпрограмм, вам нужно создать файл заголовка C с объявлениями для подпрограмм, которые вы хотите вызвать.
При связывании вам нужно связать с библиотекой fortran, -l<name of fortran lib>
.