从C++;,链接时未定义的引用 我有一个FORTRAN子程序,我想从C++程序中调用它。它接受一长串浮点参数,并使用iso_c_绑定内部模块: subroutine parasolve ( ...... ) bind (c, name='c_parasolve') use,intrinsic :: iso_c_binding implicit none ....

从C++;,链接时未定义的引用 我有一个FORTRAN子程序,我想从C++程序中调用它。它接受一长串浮点参数,并使用iso_c_绑定内部模块: subroutine parasolve ( ...... ) bind (c, name='c_parasolve') use,intrinsic :: iso_c_binding implicit none ....,c++,compilation,linker,fortran,fortran-iso-c-binding,C++,Compilation,Linker,Fortran,Fortran Iso C Binding,根据我所读的内容,我理解在以后调用外部函数之前,我需要使用C++的“extern”命令来定义外部函数。我试了两种方法。第一: extern "C" void c_parasolve( .... ); 在编译时返回“字符串常量之前的预期非限定id”,而第二个: extern void c_parasolve( .... ); 编译很好,但未能链接到“未定义的对'c_parasolve(..)”的引用”,ld返回1 我正在编译: g++ -c main.cpp 等等,以及 gfortran -

根据我所读的内容,我理解在以后调用外部函数之前,我需要使用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 ELFs,然后尝试链接:

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

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

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

编译和链接此代码的命令是什么?我编辑它是为了显示命令,因此我认为您在第一行得到了上述错误。即G++-c main.cpp???链接时会发生未定义的引用错误。使用g++编译main.cpp时会出现“字符串常量之前的预期非限定id”。fortran代码可以用gfortran正确编译。试试这个g++-c-std=c++0x-std=gnu++0x main.cpp-lgfortranThanks!感觉像个傻瓜,认为必须在调用它的同一范围内声明它。