我有一个想从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( .... );
在编译时返回“在字符串常量之前的预期非限定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函数的正确方法是什么?
看起来您的extern "C"
声明在函数或类定义中。不允许这样做-它必须位于源文件的顶层。(是的,错误消息可能更有用!)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句