4

我有一个想从 C++ 程序调用的 Fortran 子例程。它需要一长串浮点参数并使用 iso_c_binding 内部模块:

subroutine parasolve ( ...... ) bind (c, name='c_parasolve')
  use,intrinsic :: iso_c_binding
  implicit none
....

根据我所阅读的内容,我了解到我需要使用 C++ 的“extern”命令来定义外部函数,然后再调用它。我尝试了两种方法。首先:

extern "C" void c_parasolve( .... );

在编译时返回“字符串常量之前的预期 unqualified-id”,而第二个:

extern void c_parasolve( .... );

编译得很好,但无法与“未定义的对 'c_parasolve( .... )' 的引用”链接,并且 ld 返回 1。

我正在编译:

g++ -c main.cpp

等等,以及

gfortran -ffree-form -std=f2003 -c parasolve.f03

让它们进入 .o ELF,然后尝试链接:

g++ main.o otherfiles.o parasolve.o -lgfortran

调用这个 Fortran 函数的正确方法是什么?

4

1 回答 1

5

看起来您的extern "C"声明位于函数或类定义中。这是不允许的——它必须在源文件的顶层。(是的,错误消息可能会提供更多信息!)

于 2014-06-26T06:39:26.323 回答