Ошибка компиляции с программой Fortran, вызывающей функцию c ++

Я пытаюсь связать функцию C ++ во время компиляции с программой Fortran. Я компилирую mpif90 с помощью файла make. Я добавляю объектный файл C ++ в список объектных файлов в последнем. Функция компилируется сама по себе через

g ++ -c -o quenchf.o quenchf.cpp

но когда я добавляю файл .o в файл make для моего программного файла Fortran, я получаю сообщение об ошибке:

quenchf.o: В функции Optim::Optim(double, double, int, int)': quenchf.cpp:(.text+0x1348): undefined reference tooperator new [] (unsigned long) 'quenchf.cpp :(. text + 0x1359): undefined ссылка на operator new[](unsigned long)' quenchf.cpp:(.text+0x136d): undefined reference tooperator new [] (unsigned long)' quenchf.cpp :(. text + 0x1381): undefined ссылка на operator new[](unsigned long)' quenchf.cpp:(.text+0x1395): undefined reference tooperator new [] (unsigned long) 'quenchf.o: quenchf.cpp :(. text + 0x13a9): дополнительные неопределенные ссылки на operator new[](unsigned long)' follow quenchf.o:(.eh_frame+0x13): undefined reference to__gxx_personality_v0' make: * [ljnpt.exe] Ошибка 1

Нужно ли связывать библиотеку C ++ с Fortran? Я создаю экземпляр объекта C ++ в функции c, поэтому, возможно, это вызывает проблему.

Спасибо за любую помощь-


person jdeckman    schedule 29.06.2013    source источник
comment
Я не уверен, что вы сможете это сделать, если только вы не используете искаженное имя C ++ из Фортрана. Было бы проще, если бы у вас был интерфейс C для подпрограммы C ++, и вы вызывали его из Фортрана. Вам также потребуется связать библиотеки C и Fortran. Это не должно быть проблемой, но вы должны явно указать библиотеку C / C ++.   -  person cup    schedule 30.06.2013
comment
Спасибо. Вы знаете какие-нибудь конкретные библиотеки для использования?   -  person jdeckman    schedule 01.07.2013
comment
Вам понадобится как минимум libgfortran, libc, libm и, возможно, libquadmath.   -  person cup    schedule 01.07.2013
comment
Спасибо за вашу помощь-   -  person jdeckman    schedule 02.07.2013


Ответы (1)


Вы не связались со средой выполнения C ++ (которая предоставляет такие вещи, как operator new[](unsigned long)). Проблема в том, что вам понадобятся как C ++, так и среда выполнения Fortran, и я не уверен, как это сделать, но должен быть способ с флагами компоновщика.

person cmaster - reinstate monica    schedule 29.06.2013
comment
Найти библиотеки должно быть несложно. Спасибо за помощь! - person jdeckman; 29.06.2013