2013-08-12 2 views
2

Для вызова Fortran подпрограммы из C++ Я использую: ехЬегп «C» пустота routinename _ (...) с добавленным подчеркиванием делает это совместимое с Fortran именем подпрограммы «ROUTINENAME».Linking C++ с BLAS и LAPACK

Когда я связываю C++ с BLAS или LAPACK, он работает только без подчеркивания. В чем разница между связыванием C++ с этими библиотеками, написанными в Fortran, что делает подчеркивание ненужным?

+0

Слышали ли вы о 'LAPACKE' (интерфейс C до Lapack)? Существует также интерфейс C для BLAS. – Stefan

ответ

0

Я мог бы быть неправильно, учитывая, что там очень мало информации, чтобы идти дальше, но ...

От here: первые компиляторы F77 приложили _ к именам функций в ABI. Это поведение отличается от C, которое просто принимает имя функции и использует это как имя в ABI.

Некоторые компиляторы F77 вели себя по-разному, а верхний кожух полное имя подпрограммы, так что foo() стал FOO(), когда видели компиляторами C. UNIX Фортрана имитируется поведение C и просто скопировать pasta'd имя так, чтобы foo() был foo() в ABI тоже.

Если вы посмотрите на привязки BLAS к C для ссылочной реализации here, вы увидите, что они обрабатывают задние символы подчеркивания при работе с F77. Я бы сказал, что подчеркивания были гораздо более распространенной особенностью F77 ABI в прошлом, чем не иметь их.

Впоследствии Fortran 2003 представил совместимость с C (см. here). Это сделало схему именования функций одинаковой, когда использовались определенные конструкции Fortran (см. here).

Я собираюсь, таким образом, предположить, что это имеет какое-то отношение к различиям ABI в версиях Fortran. Или даже просто через компиляторы, учитывая, что разные компиляторы, похоже, имеют разные формы поведения в Fortran.

Так что, опять же, я не уверен, что это соответствует вашей ситуации, учитывая, что в вашем вопросе не так много, но я не мог вместить это все в комментарий, так что это как ответ'.

И ЕСЛИ Я НЕПРАВИЛЬНО РАССМАТРИВАЮТ, ЧТО Я МОГУ ИСПРАВИТЬ ОТЧЕТ МАХ.

ТЛ; др: потому, что версии компилятора

Смежные вопросы