我想从Fortran调用C ++函数。为此,我在Visual Studio 2010中创建了一个FORTRAN项目。之后,我将一个Cpp项目添加到该FORTRAN项目中。当我想构建程序时,会出现以下错误:
Error 1: unresolved external symbol print_C referenced in function MAIN_main.obj
Error 2: 1 unresolved externals
以下是Fortran程序和C ++函数。
Fortran计划:
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;
}
提前多多感谢。
答案 0 :(得分:1)
您的问题是,由于您使用C ++编译器进行编译,print_C
不是C函数,而是C ++函数。由于Fortran代码试图调用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定义的,因此您的代码将在两者中都有效(当然只要代码的其余部分也保留在该子集中)。