Вызов функции C ++ из Fortran в Visual Studio 2010

Я хочу вызвать функцию C ++ из Фортрана. Для этого я делаю проект FORTRAN в Visual Studio 2010. После этого я добавляю проект Cpp в этот проект FORTRAN. Следующие ошибки возникают, когда я хочу собрать программу:

Error 1: unresolved external symbol print_C referenced in function MAIN_main.obj
Error 2:    1 unresolved externals

Ниже приведены программа на Фортране и функция C ++.

Программа Фортран:

program main

use iso_c_binding, only : C_CHAR, C_NULL_CHAR
implicit none

interface
subroutine print_c ( string ) bind ( C, name = "print_C" )
use iso_c_binding, only : C_CHAR
character ( kind = C_CHAR ) :: string ( * )
end subroutine print_c
end interface

call print_C ( C_CHAR_"Hello World!" // C_NULL_CHAR )
end

C ++ функция:

# include <stdlib.h>
# include <stdio.h>

void print_C ( char *text )

{
printf ( "%s\n", text );

return;
}

Заранее большое спасибо.

-1

Решение

Ваша проблема в том, что, поскольку вы компилируете компилятор C ++, print_C это не функция C, а функция C ++. Поскольку код Фортрана пытается вызвать функцию C, он не может найти функцию C ++.

Поэтому решение вашей проблемы

  • либо скомпилировать с компилятором C, так что вы получите реальный код C,
  • или скажите компилятору C ++, что вы действительно хотите объявить функцию C.

Последнее сделано с extern "C", как это:

extern "C" void print_C(char *text)
{
printf("%s\n", text);
}

Если вы хотите иметь возможность компилировать ваш код как на C, так и на C ++, вы можете использовать

#ifdef __cplusplus
extern "C"#endif
void print_C(char *text)
{
printf("%s\n", text);
}

Символ __cplusplus определен для C ++, но не для C, поэтому ваш код будет работать в обоих (конечно, только до тех пор, пока остальная часть вашего кода также остается в этом подмножестве).

1

Другие решения


По вопросам рекламы [email protected]