Вызов кода C / C ++ из кода Fortran 77 - PullRequest
2 голосов
/ 12 июля 2010

Я пытаюсь сделать оболочку Fortran 77 для кода C ++.Я не нашел информации об этом.Идея состоит в том, чтобы использовать функции из библиотеки, написанной на C ++ в програнте Фортрана 77.

Кто-нибудь знает, как это сделать?Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Ливерморская национальная лаборатория им. Лоуренса разработала инструмент под названием Babel для интеграции программного обеспечения, написанного на нескольких языках, в одно связное приложение. Если ваши потребности просты, вы можете просто поместить C-упаковщик в ваш код C ++ и вызвать его из Fortran. Однако, если ваши потребности более продвинуты, возможно, стоит взглянуть Бабель .

1 голос
/ 12 июля 2010

Вызвать Fortran из C легко, C из Fortran потенциально сложно, C ++ из Fortran потенциально может стать ... сложным.

У меня есть несколько заметок в другом месте . Они довольно старые, но ничего не меняется очень быстро в этой области, поэтому там могут быть некоторые полезные указатели.

К сожалению, стандартного способа сделать это не существует, и разные компиляторы могут делать это немного по-разному. Сказав это, только при передаче строк вы можете столкнуться с серьезными головными болями. Приведенный выше ресурс указывает на библиотеку под названием CNF , которая призвана помочь здесь, в основном, предоставляя макросы C для подсчета бухгалтерии.

Короткая версия, однако, такова:

  • Плавающие и целые числа, как правило, просты - целое число - это целое число, более или менее.
  • Строки жесткие (потому что Fortrans довольно часто хранит их как структуры, и очень редко как массивы с нулевым символом в стиле C).
  • C - это вызов по значению, Fortran call-by-reference, что означает, что функции Fortran всегда являются указателями на значение, с точки зрения C.
  • Вам нужно позаботиться о том, как ваш компилятор генерирует символы: компиляторы часто превращают символ C / Fortran foo в _foo или foo_ или в какой-либо другой вариант (см. Документацию по компилятору).
  • C имеет тенденцию не иметь большой части времени выполнения, как C ++ и Fortran, и поэтому вы должны помнить, чтобы связать это каким-то образом, во время ссылки.

Это большая часть того, что вам нужно знать. Остальное раздражает мелочами и дружит с вашими документами по компилятору и компоновщику. В конечном итоге вы узнаете о компоновщиках больше, чем хотели бы.

...