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