Fortran 77程序与C++ DLL的连接
我在读这个问题: 有人能解释一下用Fortran 77和C++做类似的事情吗? 我需要从Fortran 77文件中提取一些子程序,并将它们转换成C++ DLL。新创建的dll需要使用旧的fortran 77文件Fortran 77程序与C++ DLL的连接,c++,gcc,dllexport,fortran77,C++,Gcc,Dllexport,Fortran77,我在读这个问题: 有人能解释一下用Fortran 77和C++做类似的事情吗? 我需要从Fortran 77文件中提取一些子程序,并将它们转换成C++ DLL。新创建的dll需要使用旧的fortran 77文件 关于如何链接和编译Fortran 77文件与C++ DLL的一些步骤说明将是非常好的。我已经搜索了很多,是混合编程的新手 > P>将C++连接到FORTRAN程序是不可能的,因为名称不正确,除非所有的东西都存在于外部。C,或者,可以使接口外部C和实现C++。 这是如何将现有的FORTRA
关于如何链接和编译Fortran 77文件与C++ DLL的一些步骤说明将是非常好的。我已经搜索了很多,是混合编程的新手 > P>将C++连接到FORTRAN程序是不可能的,因为名称不正确,除非所有的东西都存在于外部。C,或者,可以使接口外部C和实现C++。 <>这是如何将现有的FORTRAN库与C++程序链接起来,这是另一篇文章的内容。p> 1创建一个Fortran子程序,比如worker.for。这是F77,记住6个前导空格
subroutine printhi
print *, 'it works'
end subroutine
< P> 2创建一个调用它的C++程序,比如BoS.CPP。注意Fortran例程名称中的尾随下划线
#include <iostream>
// Avoid any name mangling
extern "C"
{
extern void __attribute__((stdcall)) printhi_(void);
}
int main()
{
std::cout << "Calling fortran" << std::endl;
printhi_();
std::cout << "Returned to C++" << std::endl;
}
4建立并链接C++程序。添加fortran库以解析任何特定于fortran的位
g++ boss.cpp worker.o -o cboss -L/usr/lib -lgfortran
5运行程序
./a.out
这是一个forctran程序调用C++。请注意,接口必须位于外部C中,否则链接器将找不到它们 1创建一个名为worker.cpp的C例程。注意例程名称后面的下划线
#include <iostream>
extern "C"
{
extern void __attribute__((stdcall)) worker_()
{
std::cout << "Hey it works" << std::endl;
}
}
3编译C代码
g++ -c worker.cpp
4编译并链接Fortran代码
gfortran boss.for worker.o -o fboss -L/usr/lib -lstdc++
g++ -c worker.cpp
gfortran boss.for worker.o -o fboss -L/usr/lib -lstdc++