从c++调用Fortran子程序,链接时引用未定义
Calling Fortran subroutine from C++, undefined reference when linking
我有一个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( .... );
在编译时返回"字符串常量前预期的非限定id ",而第二个:
extern void c_parasolve( .... );
编译得很好,但无法链接到"未定义的引用"c_parasolve(....)
我正在编译:
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"
声明在函数或类定义内部。这是不允许的——它必须位于源文件的顶层。(是的,错误消息可以提供更多信息!)
相关文章:
- 链接 cmake 时出现未定义的引用错误
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对GLFW / Vulkan的未定义引用,尽管库似乎是链接的
- ld 链接器错误,未定义对主函数的引用
- 与共享库链接时未定义的引用
- 链接提升 - 未定义对"提升::序列化::singleton_module::get_lock()"的引用
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 如何在 Linux 中构建共享库时使未定义引用的链接器失败
- C++ 为什么在定义的编译和链接之前引用外部实例的程序
- 引用构造函数时链接失败
- CMake 不链接 C 和 C++ 静态库(未定义对函数的引用)
- Android NDK.Build命令失败.未定义的引用.clang++:错误:链接器命令失败,退出代码为1
- 使用Cygwin C++时出现未定义的引用错误,为什么我的文件没有链接?
- 链接器错误:在包含 .so lib 后未定义对 xxx 的引用
- 未定义的引用,即使库正在链接并且它包含正确的符号
- C++ 链接器错误 LNK 2019 函数中引用的未解析的外部符号
- boost::存在符号链接不取消引用
- 链接时突然收到maxrregcount警告和未定义的引用错误
- 与 libavcodec 链接,仍然看到未定义的引用