2010-07-12 2 views
2

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

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

+4

Извините, ваш босс действительно вас ненавидит, или, может быть, вы просто очень ненавидите себя. Но эта страница может быть полезна - http://www.yolinux.com/TUTORIALS/LinuxTutorialMixingFortranAndC.html –

+2

Возможно, это поможет, если вы сообщите нам точные компиляторы C++ и f77, с которыми вы имеете дело. –

+0

Это должно быть довольно прямолинейно - просто помните, что массивы C являются строковыми, а массивы FORTRAN - столбцами. –

ответ

1

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

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

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

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

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

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

2

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