Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 77程序与C++ DLL的连接_C++_Gcc_Dllexport_Fortran77 - Fatal编程技术网

Fortran 77程序与C++ DLL的连接

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++做类似的事情吗? 我需要从Fortran 77文件中提取一些子程序,并将它们转换成C++ DLL。新创建的dll需要使用旧的fortran 77文件


关于如何链接和编译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++