从C++调用Fortran子程序,链接时未定义的参考
问题描述:
我有一个Fortran子程序,我想从C++程序调用。它需要的浮点参数的长列表,并使用ISO_C_BINDING内在模块:从C++调用Fortran子程序,链接时未定义的参考
subroutine parasolve (......) bind (c, name='c_parasolve')
use,intrinsic :: iso_c_binding
implicit none
....
基于我读过,我明白,我需要使用C++的‘外部’命令之前定义的外部函数稍后再调用它。我尝试了两种方法。第一:
extern "C" void c_parasolve(....);
收益“预期字符串之前不合格-ID常量”在编译时,而第二:
extern void c_parasolve(....);
编译得很好,但失败“未定义的引用“c_parasolve(链接....)'”和ld返回1
我与编译:
g++ -c main.cpp
等c和
gfortran -ffree-form -std=f2003 -c parasolve.f03
,让他们进入的.o的ELFs,然后尝试与链接:
g++ main.o otherfiles.o parasolve.o -lgfortran
什么是调用此Fortran函数的正确方法?
答
它看起来像你的extern "C"
声明是在一个函数或类定义。这是不允许的 - 它必须位于源文件的顶层。 (是的,错误信息可能会更丰富!)
+0
谢谢!感觉像一个doofus,认为它必须在与它被调用的地方相同的范围内声明。 – nathanvy
你有什么命令来编译和链接这段代码? –
我编辑它以显示命令 – nathanvy
,所以我认为你在第一行得到上述错误。是G ++ -c main.cpp? – Ali786