问题标签 [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.

0 投票
2 回答
8446 浏览

compiler-errors - 如何调试 Fortran 90 编译错误“在 (1) 处没有通用 'foo' 的特定子例程”?

我正在尝试使用 iso_c_bindings 模块将 Fortran 2003 绑定编写到 CUFFT 库,但我遇到了cufftPlanMany子例程问题(类似于sfftw_plan_many_dftFFTW 库中的问题)。

绑定本身如下所示:

调用部分如下所示:

不幸的是,试图编译这个结果

错误:在 (1) 处没有通用“cufftplanmany”的特定子程序

编译错误。尝试使用变量代替常量也无济于事。你能帮忙调试一下吗?

使用的编译器是gfortran:GNU Fortran (Gentoo 4.4.5 p1.2, pie-0.4.5) 4.4.5

0 投票
1 回答
1271 浏览

parallel-processing - 使用 Fortran 的 Metis

我正在将 metis 5 与 Fortran 一起使用。我正在使用PartGraphRecursive手册中给出的简单示例的功能。给出的代码不是工作条件。

任何人都可以完成此代码吗?我不太清楚如何在METIS_PartGraphRecursive调用中使用不同的输入,因为我想使用的大多数输入都是 NULL。

PS 我正在使用带有pgf90Fortran 编译器的 Linux,并且我正在使用以下命令来编译和链接文件。

libmetis.a 文件与 main 位于同一目录中。

0 投票
3 回答
13588 浏览

c - 从 C 调用 FORTRAN 子例程

我正在尝试从 C 调用 FORTRAN 函数

我的问题是:

  1. 如果fortRoutine是我的 fortran 子例程的名称,那么我从 C 中将其称为fortRoutine_. 如果fortRoutine只包含一个字符数组参数,那么我可以这样传递:

    /li>
  2. 在调用 FORTRAN 子例程时,我应该何时使用按值传递以及何时使用按引用传递?

由于我是 C 新手,所以我对此一无所知。如果可能的话,请推荐一些好的教程链接。

0 投票
2 回答
774 浏览

c - 从 C 库头文件自动生成 Fortran 2003 绑定(使用 iso_c_bindings 内部模块)

是否有使用Fortran 2003 标准的内部模块从 C 库头文件自动生成 Fortan绑定的工具?iso_c_bindings

我对C 转换为 Fortran 不感兴趣,而只对生成绑定感兴趣。

0 投票
2 回答
702 浏览

c++ - 不同 Fortran 和 C 供应商之间的 ISO_C_BINDING

C/C++ 编译器供应商是否也支持 Fortran ISO_C_BINDING 模块的概念?例如,C/C++ 的大小int可能因不同供应商的编译器而异。因此,使用 ISO_C_BINDING 模块,我们知道 FortranC_INT类型是 4 个字节;而不仅仅是一种4。但是,我们仍然不知道intC/C++ 中的一般大小。我对么?是否有标准的 C/C++ ISO_C_BINDING 兼容编译器开关?

0 投票
3 回答
1653 浏览

c - 如何在从C“调用”的fortran例程中分配一个数组

我认为标题说明了我的需要。我知道我们可以使用“asd”函数来做到这一点,但由于某些原因,我需要在 Fortran 中进行分配(即在子程序“asd_”中)。这是C代码:

这是 Fortran 代码:

这随机给出分段错误。任何帮助,将不胜感激。

0 投票
1 回答
4392 浏览

c - 使用 iso_c_binding 的 Fortran-C 桥中的字符串数组

我正在编写代码,该代码将使用 Fortran 的 C 互操作性机制(在 Fortran 2003 中引入并在较新版本的 gfortran 和 ifort 中实现)从 Fortran 调用 C 函数。

这个答案几乎是我所需要的,但我无法完全理解我应该在 Fortran 中为如下所示的 C 函数使用什么接口声明:

我不清楚 Fortran 端接口的声明应该是什么:

我知道我也必须处理空终止问题。

0 投票
1 回答
243 浏览

c - 带有 iso_c_bindings 的单个 C 函数的许多替代 Fortran 接口

是否可以使用内部模块为单个 C 函数/过程生成多个 Fortran 2003 接口iso_c_bindings

我想为 C 类型的参数与 Fortran 的参数不完全匹配的情况提供替代接口,例如*float在 C 中可能是数组、对单个变量的引用或指针 (C_PTR_NUL)。

0 投票
7 回答
7789 浏览

c - 为返回 char* 的 C 函数创建 FORTRAN 接口

我已经为此困扰了大约一个星期,并且已经在一个又一个论坛中搜索了一个关于如何将 char* 从 C 发送到 FORTRAN 的清晰解释。为了让事情更令人沮丧,将 char* 参数从 FORTRAN 发送到 C 是直截了当的......

将 char* 参数从 FORTRAN 发送到 C(这工作正常):

来自 FORTRAN:

当尝试使用类似的逻辑从 C 返回一个 char* 时,我遇到一个又一个问题。我认为应该奏效的一种尝试是:

和 FORTRAN 界面:

(我不能从字面上使用 DIMENSION(*),所以我已经超大到 255。)

应该返回一个指向 255 个 C 样式字符的数组的指针 - 但如果是这样,我无法将其转换为有意义的字符串。在实践中,它会返回一组随机字符,从 Wingdings 到“bell”字符的任何位置......

我也试图返回:

  • 指向 CHARACTER (LEN=255, KIND=C_CHAR) 的指针。
  • 字面意思是 CHARACTER(LEN=255, KIND=C_CHAR)。
  • 一个 INTEGER(C_SIZE_T),并试图将其巧妙地转换为一个指向字符串数组的指针。
  • 一个人物。
  • 等等

如果有人可以给我一个如何做到这一点的例子,我将非常感激......

最好的祝福,

麦克风

0 投票
2 回答
4088 浏览

linux - 套接字编程 gfortran

我希望能够在我的 Fortran 应用程序中调用网络功能。我的老板希望我用 Fortran 做所有事情,而不是使用 C 和 Fortran。我们已经在 Windows 上使用 PGI 的 Fortran 编译器完成了该应用程序的一个版本。我们正在将它转移到 Linux 上,我们可能会在其中使用他们的编译器。现在,我正在使用 gfortran。

我为这些网络调用创建了一个接口,并且一切都编译和链接。下面的代码与我正在做的类似,除了接口和常量在一个模块中。

当我运行程序时,套接字函数返回 -1 失败。我真的不知道发生了什么事。我没有在命令行上添加任何库,所以我猜它与默认库正确链接。我编译使用