Я хочу вызвать функцию 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;
}
Заранее большое спасибо.
Ваша проблема в том, что, поскольку вы компилируете компилятор C ++, print_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, поэтому ваш код будет работать в обоих (конечно, только до тех пор, пока остальная часть вашего кода также остается в этом подмножестве).