在Visual Studio 2010中使用Fortran调用c++函数
Calling C++ function from Fortran in Visual Studio 2010
我想从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 ( "%sn", text );
return;
}
您的问题是,由于您使用c++编译器进行编译,因此print_C
不是C函数,而是c++函数。由于Fortran代码试图调用C函数,因此无法找到c++函数。
因此,你的问题的解决方案是
- 或者用C编译器编译,这样你就得到了真正的C代码,
- 或者告诉c++编译器你想要声明一个C函数。
后者使用extern "C"
完成,如下所示:
extern "C" void print_C(char *text)
{
printf("%sn", text);
}
如果你想同时编译C和c++的代码,你可以使用
#ifdef __cplusplus
extern "C"
#endif
void print_C(char *text)
{
printf("%sn", text);
}
符号__cplusplus
是为c++定义的,但不是为C定义的,所以你的代码将在这两种语言中工作(当然,只要你的代码的其余部分也保留在该子集中)。
相关文章:
- Fortran 和 C++ 的混合编程:Fortran 不能调用C++子程序
- 是否可以从C 调用FORTRAN接口
- 如何使用 std::vector 作为参数调用 Fortran 77 C++函数?
- 试图在C 中调用Fortran子例程
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 从C 调用Fortran子例程会产生非法参数值
- MATLAB由于调用库(C++.h文件和FORTRAN.dll)而崩溃
- 从C++调用的Fortran子程序的值错误
- 为什么值放置在 fortran 函数的数组中,而在调用 c++ 函数中不存在
- 当C代码调用Fortran子程序时,子程序顶部会出现分段错误
- 从QTCreator中调用QT的Fortran代码
- 从 C++ 调用 Fortran 子例程
- C++从dll调用FORTRAN子程序
- 使用 OpenMPI 从 Fortran 调用C++
- 从Fortran调用C++(链接问题?)
- 在Visual Studio 2010中使用Fortran调用c++函数
- 对"gemmkernel_"的未定义引用 - 从 Fortran 调用C++例程
- Fortran调用c++指针函数
- 从Fortran调用的c++子程序:如何处理动态内存分配
- 从 Fortran 调用 C 函数,其中 C 函数名称最初是从 C 传入的