jjzjj

c++ - 将字符串从 Fortran 传递到 C/C++ 的正确方法

我想将字符串从Fortran传递到C/C++。这是我的Fortran代码:subroutinezdplaskinGetSpeciesName(cstring,index)bind(C,name='zdplaskinGetSpeciesName')useiso_c_bindinguseZDPlasKinimplicitnoneinteger,intent(in)::indexCHARACTER(10),TARGET::fstring=''TYPE(C_PTR)::cstringfstring=species_name(index+1)cstring=c_loc(fstring)endsu

c++ - 混合编程 - 包括 C++ 头文件到 Fortran

我正在尝试在用Fortran编写的程序中使用用C++编写的库中的函数。C++库总结在一个头文件中,因此如果您想在另一个C++程序中使用它,您只需执行#includefunctions.h我想了解如何在Fortran中执行类似的操作。根据我的研究,我创建了这个最小的可行示例:clib/functions.h:#ifndefADD_H#defineADD_Hextern"C"{int__stdcalladd(intx,inty);}#endifclib/函数.cpp:extern"C"{int__stdcalladd(intx,inty){returnx+y;}}cinclude.c#in

c++ - 从 C++ 调用 Fortran 子例程,链接时 undefined reference

我有一个Fortran子例程,我想从C++程序中调用它。它需要一长串浮点参数并使用iso_c_binding内部模块:subroutineparasolve(......)bind(c,name='c_parasolve')use,intrinsic::iso_c_bindingimplicitnone....根据我所读的内容,我明白我需要使用C++的“extern”命令来定义外部函数,然后再调用它。我尝试了两种方法。第一个:extern"C"voidc_parasolve(....);在编译时返回“expectedunqualified-idbeforestringconstant”

在fortran90中填充一个尺寸未知大小的阵列

我想在fortran90中填充一个尺寸未知的数组。这是MATLAB中的等效代码:fori=1:10A[i]=iend我知道我可以通过大小,但是如何在fortran90中执行此操作,而不会传递数组的大小。我读到我们可以使用指针,但我真的不知道如何处理指针看答案我了解您想在知道数组的最终大小之前开始将元素添加到数组中。例如,您想从文件读取值,直到到达文件末尾,不知道有多少值。我可以想到三种方法:创建足够大小的数组,并记住最终值。integer::a(200),nn=1doa(n)=if()exitn=n+1enddo创建两个可分配的阵列,当您到达一个末端时,使另一个阵列更大,然后交换它们:inte

c++ - 将 Fortran 77 函数传递给 C/C++

是否可以将Fortran77函数作为回调函数指针传递给C/C++?如果是,怎么办?我在网上找到的信息与fortran90及更高版本有关,但我的遗留代码库是77。非常感谢 最佳答案 如果可以在FORTRAN77中完成,它将是特定于编译器和平台的。Fortran2003的新ISOCBinding提供了一种混合Fortran和C以及任何遵循或可以遵循C调用约定的语言(例如C++)的标准方式。虽然正式成为Fortran2003的一部分,并且完全支持整个Fortran2003的Fortran编译器极少,但许多Fortran95编译器都支持IS

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++ - ld : file not found:/usr/lib/crt1. o

在MacOSXSierra上尝试使用PGI编译Fortran时,出现错误ld:filenotfound:/usr/lib/crt1.o我找到了适用于旧版MacOSX的解决方法(http://www.pgroup.com/userforum/viewtopic.php?t=4578)sudoln-s/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/lib/crt1.o/usr/lib/crt1.o但是,对于Sierra,系统完整性保

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的指针出