问题标签 [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 - 无法链接小型 C 和 Fortran 程序
我有一个小型 C 程序,我想链接到一个小型 Fortran 程序,但得到链接器错误undefined reference to fibonacci_array
。
Fortran 代码:
C代码:
生成文件:
错误信息:
arrays - 如何将数组从 Fortran 返回到 C?
我想知道使用 Fortran 中的 ISO C 绑定将数组从 Fortran 返回到 C 的正确方法是什么。
c++ - 为什么这种将指针从 C++ 传递到 Fortran 的尝试不起作用?
我需要将一个动态数组从 c++ 传递给 Fortran。我做了很多研究来整理一个我认为应该有效的例子,但事实并非如此。该程序应在 c++ 程序中创建一个数组,将该数组的指针传递给 Fortran 例程,将 C 指针转换为 Fortran 指针,然后在 Fortran 端打印该数组。
我的 C++ 主程序:
我的 Fortran 例程:
我将其构建为:
但是当我运行它时,它不是打印数组值,而是说:
我对指针的想法很陌生,所以我想我不明白它们是如何正常工作的。您能否指出为什么我在运行此程序时会出现此内存错误?
c - 无法将数组从 FORTRAN 传递到 C
我正在尝试将 FORTRAN 程序中的一维数组传递给 C。
C 函数被调用,但它保存的值是垃圾。但是,如果我尝试使用整数变量调用相同的函数,我可以传递所需的值。谁能帮我解决这个问题?
我使用的代码与此类似
文件:fortran_prog.f
文件:c_prog.c
interop - 为什么使用 BIND(C, NAME="name") 属性时我的 fortran 函数没有导出
我习惯使用以下语法
在 .dll 中生成导出函数
所以现在我正在ISO_C_BINDING
使用以下代码尝试新的
但是没有创建导出功能
那么我在这里错过了什么?新的iso_c_binding
将如何替换已弃用的!DEC$ ATTRIBUTE DLLEXPORT
声明?
PS。我通过 VS2010 在 Win7-64 平台上使用 Intel Fortran XE 2013。
c++ - Fortran functions with C interface result in undefined references when they try to call each other, why?
I have an old fortran code, for various reasons I am modifying it to provide functionality using c++.
In this code there are two functions, CALC and CALC2. These functions need to be called from the c++ and they call each other.
A sketch of CALC:
A sketch of CALC2:
My current main.cpp:
Running my make file everything compiles properly, but come the link phase I get this:
Why is this the case and how do I fix it?
c - 在 Fortran 派生类型中保存指向 C 函数的指针
我有一个从 C 程序调用的 Fortran DLL,我的一个程序需要定期调用由 C 程序提供的回调函数。我目前让它以其“简单”形式运行良好,但我希望能够将我的回调指针存储在派生类型中,以便可以更轻松地在我的 Fortran 代码中传递它。到目前为止,我尝试过的任何方法似乎都不起作用。
首先,这是我目前所拥有的,这确实有效:
从 C(OK,实际上是 C++)程序开始,回调的标头原型是:
Fortran 调用的原型是:
实际的回调函数是:
从 C++ 对 Fortran 代码的调用是:
其中m_image
是一个图像数据数组,它是当前对象的成员属性。发生的情况是 C++ 将原始图像数据传递给 Fortran DLL 并要求 Fortran 处理它,由于这需要很长时间,Fortran 会定期更新图像缓冲区并调用回调来刷新 GUI。无论如何,转到 Fortran 方面,我们为 C 回调定义了一个接口:
并定义我们的主要 Fortran 例程:
在主程序的某个地方,我们称之为子程序foo
:
...其中foo
定义为:
正如我所说,所有这一切都运作良好,并且已经这样做了很长时间。
现在对于我尝试过但不起作用的事情:
天真的方法,只是将参数复制到结构的字段中
我希望这能奏效,因为我所做的只是将原始元素复制到没有修改的结构中。C 端没有任何变化,Fortran 主函数的定义和c_callback
. 我所做的只是创建一个新的 Fortran 派生类型:
然后在我的主函数中,我用从 C 应用程序接收到的值填充它:
子例程 foo 稍作修改,现在它在结构中查找回调和 C 对象:
这在调用“访问冲突读取位置 0xffffffffffffffff”时失败。
使用更多 iso_c_binding 功能的复杂方法
C 端也没有任何变化,但我修改了主函数的 Fortran 端以接收回调c_funptr
:
我像以前一样定义了抽象接口subroutine c_callback
,尽管我已经尝试了保留bind(c)
它的一部分并省略它。调用子例程的主函数中的代码foo
现在是:
...子例程 foo 本身仍然像前面的例子一样定义。
不幸的是,这与前面的示例完全相同。
我假设有一个正确的语法来实现我在这里想要实现的目标,我将非常感谢任何建议。
macos - 在 OS X 10.8 上使用 gfortran 对函数指针进行非法文本重定位
我在通过自制软件安装了 Xcode 5.0.2 和 gfortran 4.8.2 的 OS X 10.8 系统上收到以下错误消息。
f03_iso_c.f03 的内容是
任何解决此错误的帮助将不胜感激。
c - 将 fortran-iso-c-binding real 变量转换为 real
使用 fortran-iso-c-binding 我可以接口 C 函数并获取类型的变量,例如
但是在程序的其余部分我想使用基本类型(仅仅是因为我不想real(c_float)
仅仅因为一个接口函数而用变量替换许多实变量)
是否有一种安全、平台/编译器独立且可靠的方法如何将 fortran-iso-c-binding 类型转换回 fortran(原始)类型?等价于 REAL()