Как можно использовать фортран функций в С++?
Я как-то раз делал это на GCC, вот так:
(Позарез нужен был вот этот алгоритм, а переписывать на С++ не хотелось. Взял оригинальную реализацию на фортране, 197х года...)
Код на С++ и фортране компилируется обычным способом (для фортрана - компилятор gfortran
, идет в комплекте с GCC), и линкуется в один файл.
В коде на С++ пишется прототип функции, обернутый в extern "C" {...}
, который потом вызывается как обычно.
Имя функции в прототипе должно быть таким же, как в коде на фортране, но записанное в нижнем регистре, и с _
на конце.
Если вдруг такое имя не подходит (ошибка "undefined reference to ..."), то нужно применить objdump -t файл.o
к объектному файлу, сделанному из кода на фортране, и найти нужное имя в списке функций.
Типы параметров для прототипа можно подобрать на глазок. Если никак не получается (программа вылетает или в функцию приходят неправильные значения), то придется читать мануалы к GCC и выяснять, какие типы из С++ и фортрана соответствуют друг другу.
В комментариях @avp подсказывает, что обычные числа (не массивы) в фортране передаются по ссылке, так что в C++ на их месте скорее всего нужно использовать указатели.
Никакие calling conventions мне указывать не потребовалось.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Никак не могу выполнить задачу, заданную в ВУЗе - мой алгоритм не работает для больших значенийПодскажите какой-нибудь другой алгоритм для...
Создаю поток методом CreateThreadКак из основного потока получить доступ к обьекту созданому во втором потоке и вызвать его метод?
Подскажите, является ли отсутствие default в switch неопределенным поведением, если в switch попадает значение, для которого нет соответствующего...