问题标签 [fortran-iso-c-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 保持线程存活 (pthread, c)
我有以下情况:
Fortran 程序调用 ( iso_c_binding
) 一个函数(用 C 编写),该函数通过该pthread_create
函数启动服务器(套接字函数)。该服务器应该继续运行(等待连接),直到某个变量设置为1
. 我遇到的问题是,一旦启动服务器的函数返回(到 Fortran 程序),服务器线程就会退出。我不确定如何处理这种情况(让服务器套接字运行直到它得到停止的信号)。
亲切的问候
(添加代码)
fortran 程序
c 运行服务器代码
c 服务器代码
如果我在“c run server code”中的“Server running”语句之后(在返回 0 之前)添加一个 while(1) 循环,则服务器保持活动状态并继续读取消息。我不得不说,我既不是 Fortran 编程专家,也不是 C 编程专家。
algorithm - 如何在调用 C 例程之前有效地转换 Fortran 数组
假设我有以下 Fortran 子例程:
并且还假设这c_test
是一个指向 C 例程的指针,该例程在向量上工作并在变量x
中返回结果。value
这很有效,但我有一个问题:
向量的转换x
会极大地影响调用子程序的算法的复杂性f_test
。我的意思是,如果这样的算法调用f_test
n
时间,算法的复杂度将是二次的,但如果没有这种转换,它将只是线性的。因此,以这种方式进行的这种转换是不切实际的。有什么合理的方法可以解决这个问题吗?
c - 将指针从 C 传递到 fortran 子程序
我正在尝试从 C 调用 fortran 子例程,我可以在 C 中分配并将指针安全地传递给 Fortran 吗?子程序中的数组是一个自动数组 (x(nmax))。
(我正在分配 x,然后将其传递给 fortran)
c - C 等价于 Fortran 名单
我习惯了 Fortran,在其中我使用名称列表顺序读取来从文件中获取变量。这让我有一个看起来像这样的文件
我可以通过它的名称命名变量并分配一个值以及事后评论以说明变量的实际含义。装载非常容易通过
现在我的问题是,C 中有没有类似的东西?或者我是否必须通过在“=”等处切断字符串来手动完成?
c - 在 Fortran 代码中调用 C 函数/子例程
我正在尝试编译和链接调用 c 子例程的 Fortran 代码:
Fortran 代码:
C代码:
我使用以下命令在 windows 环境中编译和链接。
我收到以下错误:
请帮我解决这个问题?谢谢。
c - 使用 gfortran 和 gcc 从 c 访问 fortran 模块数据
我试图在fortran代码中访问模块变量,从C调用它。我已经调用了一个子例程,但不能调用变量。
C代码是
我正在编译通过
gcc 以未定义的对“aa”的引用对其响应
c++ - 混合 C++ 和 Fortran 程序的 Makefile 编译问题
这是我的生成文件:
这就是我编译 cuda_kernels.cu nvcc -c -arch sm_20 -lcuda -lcudart -lcusparse cuda_kernels.cu 的方式
这就是我得到的错误
以下是upcg7.f(这不是我的代码,我从这里下载) https://github.com/jdhughes-usgs/modflow-2005-upcg/blob/master/code/src/UPCG/upcg7.f
以下是 upcgc.cpp 和 upcgc.h(这不是我的代码,我从这里下载) https://github.com/jdhughes-usgs/modflow-2005-upcg/blob/master/code/src/UPCG/ upcgc.cpp
**我的问题是 ** SUPCGILU0A 是 upcg7.f 中定义的子程序。从 C++ 程序 upcgc.cpp 调用子程序 SUPCGILU0A。upcgc7_init、upcgc7和upcgc7_final定义在upcgc.cpp中,这三个是从fortran程序upcg7.f中调用的。
我从我的研究中了解到,这些可能是链接器问题,或者 C++ 和 Fortran 需要相互转换一些函数/例程,但我无法弄清楚问题是什么。有没有人可能对问题所在有所了解?
c++ - 将 C++ 数组传递给 Fortran 子例程会导致 nan 值出现在结果中
我正在尝试使用 C++ 应用程序中的 Fortran 代码。具体来说,我正在尝试与 SLATEC 的drc3jj.f进行交互。但是,Fortran 子例程返回一个数组,其大小取决于传递给函数的参数。
如果数组的大小为 1,则我打印的 C++ 数组包含适当的值。但是,如果此大小大于 1,则 C++ 数组包含应该有输出值的 NaN。
下面是我使用的代码。这只是将 Fortran 子例程链接到 C++ 应用程序。
肉在这里。我们实际上从 C++ 调用 Fortran 子例程并打印输出:
如果我们用 调用程序./myProgram 2 8 2 8
,它会正确输出 1/sqrt(21)。但是,如果我们尝试./myProgram 2 8 2 7
,其中数组的大小实际上是 2,我们会得到以下结果:
NaN 实际上有正确的符号。
无论如何,是否有另一种(正确的)方法可以将 C++ 数组传递给 Fortran?这甚至是问题吗?
winapi - 使用 gcc (gfortran) 编译时可以调用 windows api 函数(64 位)吗?
我正在尝试编译一个子例程 sendmsg.f90,我们以前用 lf90 作为 32 位现在用 gcc 作为 64 位编译。目的是将它与其他用 gcc 编译的 64 位子程序链接起来。
我们有 Lahey Fortran 7.5,它有 lf90 编译器和 gcc(它使用 gfortran)和一个叫做 lgf 的东西(我想它使用 gcc,对吗?)。
我是 Windows 编程(和 Fortran)的新手。使用 gcc 编译的代码可以调用 Windows API 吗?我应该使用 ISO_C_BINDING 吗?
我应该这样做还是应该尝试将 lf90 创建的 .obj 文件与 gcc 创建的 .o 文件链接?
谢谢你的帮助!
更新:我尝试使用以下方法调用 Windows API:
但是当我尝试用“gcc -m64 sendmsg.f90”编译时,我得到了错误:
这种方法有意义吗?为什么我对 SendMessage 的引用未定义?
fortran - MATLAB mex c + Fortran 错误
我正在尝试混合一个由用 c 和 fortran 编写的文件组成的项目。为了方便起见,我创建了这个简单的函数:
我的总和
和 test.c
使用英特尔 Fortran 编译器 (x64) 我运行:
ifort /c mysum.f
它创建了 mysum.obj
在 Matlab (x64) 中,我使用 Microsoft SDK 作为编译器并编写:
mex -O -largeArrayDims LINKFLAGS="$LINKFLAGS /NODEFAULTLIB:MSVCRT.lib" test.c mysum.obj
不幸的是,它给出了这个错误:
test.obj:错误 LNK2019:函数 mexFunction test.mexw64 中引用的未解析的外部符号 mysum:致命错误 LNK1120:1 个未解析的外部符号
在这一点上,我被卡住了,我不知道该怎么办。我使用选项 /NODEFAULTLIB 是因为与 MSVCRT.lib 存在冲突。
我需要一些帮助。