我正在尝试验证一个用c ++编写的简单hello world函数可以从FORTRAN脚本调用(gfortran 4.9.20。我对c ++和FORTRAN都没什么经验所以我认为这是我应该开始的。< / p>
//code.cpp
#include <iostream>
extern "C"
{
void worker();
int main()
{
worker();
}
void worker()
{
std::cout << "Hello, World!\n";
}
}
和标题如下
//code.h
#include "code.cpp"
extern "C"
{
void worker();
}
我可以使用下面的简单代码在c ++中调用我的hello函数
//readheader.cpp
#include "code.h"
extern "C"
{
void worker();
}
我认为一切顺利,直到我尝试使用FORTRAN读取相同的代码。它可能是我的编译行,此时我不确定我的代码的哪一部分被破坏了。以下是我的FORTRAN代码
c codeF.f
program main
include 'code.h'
print *, 'Calling C'
call worker()
print *, 'Back to F77'
end program main
我的编译脚本
gfortran -I/Path/to/file -c codeF.f
我在'code.h'标题中得到8个错误。虽然我的c ++代码可以读取标题FORTRAN不能。到目前为止,我所有的互联网研究都引导我到这里,希望有经验的人可以帮助我。
由于
答案 0 :(得分:1)
您不能在Fortran中包含C ++标头。您必须创建一个接口块,它描述了Fortran可以调用它的过程:
program main
interface
subroutine worker() bind(C,name="worker")
end subroutine
end interface
print *, 'Calling C'
call worker()
print *, 'Back to F2003'
end program main
您可能仍然遇到问题,建议将Fortran和C ++ I / O(std:cout
流和print
语句)合并到一个可执行文件中。它们不能保证兼容,并且可能发生奇怪的事情。
忘了FORTRAN 77,它已经40岁了,这比这里的很多人(包括我)都要多。考虑到计算机和程序的发展速度,即使Fortran 90也太老了。最新标准是Fortran 2008,Fortran 2015作为草案存在。
请参阅fortran-iso-c-binding中的问题和答案,了解有关将C和C ++与Fortran连接的更多信息。