【发布时间】:2017-05-11 23:54:15
【问题描述】:
我想从 F77 主程序调用 C++ 函数。我已经在主程序中定义了:
DOUBLE PRECISION FC34F, bf_Fc34F
然后打个电话
FC34F = bf_Fc34F( temp )
函数bf_Fc34F是*.C文件中的C函数,定义为
double bf_Fc34F_( double T ){
T="some_mathematical_expression";
return T;
}
我正在使用 g++/gfortran,并且在编译 *.C 文件 (g++ -c *.C) 时,*.o 文件附有一个尾随“_d”(我认为是“双”),它主程序没有,因此我收到“未定义的引用”错误。
有人知道如何解决这个问题吗?
【问题讨论】:
-
C++代码编译成功了吗?将
double变量分配给字符串常量应该可以防止编译,更不用说链接了。 -
你的函数是一个 C 函数。为什么要使用 C++ 编译器?另外,Fortran 总是通过指针传递参数,所以你的 C 函数必须以
double *T作为参数。 -
请显示详细信息。代码、编译器命令、错误消息。它们很重要。你需要 C++ 中的
extern "C"。您需要处理名称修改。这里有很多类似的问题。特别是在链接fortran-iso-c-binding. -
相关/(重复?)stackoverflow.com/questions/18491911/… stackoverflow.com/questions/18491911/… stackoverflow.com/questions/2495503/… 或直接查看相关下的右侧或搜索
[c++] [fortan]以查看更多示例。这真的不是什么新鲜事。 -
Fortran-c 的互操作性与现代特性非常容易,尤其是
ISO_C_BINDING。你真的只限F77吗?我对此表示怀疑。
标签: c++ c fortran fortran77 fortran-iso-c-binding