gpt4 book ai didi

c++ - 从 C++ 调用 Fortran 子例程,链接时 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:55 25 4
gpt4 key购买 nike

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

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

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

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

在编译时返回“expected unqualified-id before string constant”,而第二个:

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" 声明在函数或类定义中。这是不允许的——它必须位于源文件的顶层。 (是的,错误消息可能会提供更多信息!)

关于c++ - 从 C++ 调用 Fortran 子例程,链接时 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24422639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com