草庐IT

fortran77

全部标签

c++ - main : linking fortran with C++的多重定义

我想编写一个C++程序,从中调用mvndst_()子例程http://www.math.wsu.edu/faculty/genz/software/fort77/mvndstpack.f在Linux上,如果我创建test.cc:extern"C"{intmvndst_(int*,double*,double*,int*,double*,int*,double*,double*,double*,double*,int*);};intmain(){return0;}并编译通过g++-c-otest.otest.ccgfortran-c-omvndstpack.omvndstpack.fgf

c++ - 如何在 C++ 中创建动态 DLL 库,以替代遗留的 Fortran DLL

我必须在C++中创建一个动态DLL库,以替代用Fortran编写的旧DLL库,而无需更改主机应用程序(因此函数和参数必须保持不变)。我有那个库中所有Fortran函数的完整规范,但是我需要使用什么工具(编译器),以及在这种情况下编码DLL的方式是什么(stdcall、cdecl、dllexport等-这些线索没有不用多说,我以前从未创建过DLL)。这是遗留DLL中的示例Fortran函数声明:SUBROUTINESetBoundaries(MaxFlow,MinFlow)cDEC$ATTRIBUTESDLLEXPORT::SetBoundariescDEC$ATTRIBUTESALIA

c++ - 通过在 Fortran 中调用 C++ 函数将 Fortran int 数组传递给 C++

我正在尝试在Fortran子例程中调用C++函数。这个C++函数应该更新一个整数数组。这是我写的一个非工作代码。什么问题?!FortranfunctionthatcallsaC++function.subroutinemy_function()integer(4)ar(*)integer(4)get_filled_ar!Needcorrectsyntaxhere.ar=get_filled_ar()end//C++function:extern"C"{voidget_filled_ar(int*ar){ar[0]=1;ar[1]=10;ar[3]=100;}}

c++ - Fortran 从 C 接受字符串(?)

我觉得这应该是一个简单的问题,但我做不到。我有一些Fortran代码接受如下输入:SUBROUTINETRACE(X,Y,NAME,XX,YY)EXTERNALNAMECALLNAME(X,Y,XX,YY)我正在尝试以以下形式从C++传递一个名称:floatx,y,xx,yy;char*name="IGRF";trace_(&x,&y,name,&xx,&yy);它可以编译,但是当我尝试调用NAME子例程时,我总是遇到段错误。文件中定义了一个名为IGRF的子例程,我可以直接从C++调用IGRF子例程,但需要这个TRACE例程。在gdb中运行时,它表示NAME变量作为指向void的指针出

c++ - 与 Visual Studio 兼容的免费/开源 Windows Fortran 编译器

我正在尝试将一些遗留Fortran代码与VisualStudioC++项目链接起来。我尝试使用gfortran的Windows构建来构建我的静态库,但VisualStudio提示未解析的外部符号。我猜这是因为混合使用mingw和visualstudio编译器是一个非常糟糕的想法。我用谷歌搜索了一下,发现我的选项是Intel's和Lahey's编译器,但两者都带有高昂的价格标签。有谁知道其他选择,或者我可以采用的不同方法吗?根据评论进行编辑我得到的错误是:Error7errorLNK2019:unresolvedexternalsymbol___chkstkreferencedinfun

c++ - 如何在 C++ 代码中调用模块中包含的 Fortran90 函数?

我在我的C++项目中包含了一个不是我的fortran90程序。在第一步中,我尝试通过它们的名称_()调用该函数,但通过显示obj文件的符号(使用nm)我得到错误“对mp_mpi_cartesian_init_的undefinedreference”,我发现该函数是由它们调用的模块作为module_function_所以我添加了模块名称并且我得到了同样的问题但是在fortranobj之间,例如“Constants.f90:(.text+0x36):undefinedreferenceto__powi4i4”这是C++代码:#include#includeusingnamespacestd

c++ - 我怎样才能使这个简单的 Fortran 90 代码更快?

我正在尝试比较使用Fortran90和C++计算整数立方和的简单代码的计算时间,因为我听说它们在相似级别上速度很快。我使用gfortran和g++(在MacOSX上)编译这些代码。有人可以指出为什么Fortran90代码比等效的C++代码(12秒)花费更多的时间(49秒)吗?我只知道C++是行专业,Fortran是列专业,但我认为这与这些代码无关。我怎样才能使这个fortran90代码更快?任何提示将不胜感激。谢谢。Fortran代码和编译gfortran-obb1code15.f90programcode15implicitnonedoubleprecision,dimension(

c++ - 从 Fortran 返回字符串到 C++

我在C++中有以下函数调用:intstrLength=20;char*name;getName(name,strLength);printf("name:%s\n",name);在Fortran中:subroutinegetName(name)bind(c,name='GETNAME')use,intrinsic::iso_c_bindingimplicitnonecharacter,intent(out)::namename='Martin'endsubroutinegetName当我执行C++例程时,输出是:name:M。现在,我想这是因为character,intent(out)

c++ - 混合 C++ 和 Fortran 链接问题

我在网上做了一些搜索,但找不到如何从linux编译简单的C++和Fortran代码。我需要让它变得复杂,但我只需要知道如何从一个简单的例子开始。我的C++代码是这样的:#includeusingnamespacestd;externintAdd(int*,int*);externintMultiply(int*,int*);intmain(){inta,b,c;cout>a>>b;c=Add(&a,&b);cout我的Fortran代码是这样的:integerfunctionAdd(a,b)integera,bAdd=a+breturnendintegerfunctionMultipl

一个Fortran模块需要位于另一个模块中的子例程

我有这样的问题:main.f90->包含主文件sub_a.f90->包含子例程asub_b.f90->包含子例程belets_stuffs.f90->包含点2和3所需的所有功能。所有四个点都是单独写的。main.f90includesub_A.f90includesub_B.f90includeother_stuffs.f90programMAINuseAuseBuseother...callproc_Acall_proc_BendprogramMAINsub_a.f90moduleAcontainssubroutineproc_Auseother...callcomp