nat*_*nvy 4 c++ linker fortran compilation fortran-iso-c-binding
我有一个Fortran子例程,我想从C++程序中调用它.它需要很长的浮点参数列表并使用iso_c_binding内部模块:
subroutine parasolve ( ...... ) bind (c, name='c_parasolve')
use,intrinsic :: iso_c_binding
implicit none
....
Run Code Online (Sandbox Code Playgroud)
基于我所读到的内容,我理解我需要使用C++的"extern"命令来定义外部函数,然后再调用它.我尝试了两种方法.首先:
extern "C" void c_parasolve( .... );
Run Code Online (Sandbox Code Playgroud)
在编译时返回"字符串常量之前的预期unqualified-id",而第二个:
extern void c_parasolve( .... );
Run Code Online (Sandbox Code Playgroud)
编译得很好但无法链接"未定义引用'c_parasolve(....)'"并且ld返回1.
我正在编译:
g++ -c main.cpp
Run Code Online (Sandbox Code Playgroud)
等等
gfortran -ffree-form -std=f2003 -c parasolve.f03
Run Code Online (Sandbox Code Playgroud)
让他们进入.o ELF然后尝试链接:
g++ main.o otherfiles.o parasolve.o -lgfortran
Run Code Online (Sandbox Code Playgroud)
调用此Fortran函数的正确方法是什么?