从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函数的正确方法?

+0

你有什么命令来编译和链接这段代码? –

+0

我编辑它以显示命令 – nathanvy

+0

,所以我认为你在第一行得到上述错误。是G ++ -c main.cpp? – Ali786

它看起来像你的extern "C"声明是在一个函数或类定义。这是不允许的 - 它必须位于源文件的顶层。 (是的,错误信息可能会更丰富!)

+0

谢谢!感觉像一个doofus,认为它必须在与它被调用的地方相同的范围内声明。 – nathanvy