问题标签 [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++ - 返回数组的 FORTRAN 函数会导致段错误(从 C++ 调用)
基本上,这是我的问题。我正在从我的 C++ 代码中调用其他人的 FORTRAN 函数,这让我很头疼。一些代码:
这就是 FORTRAN 函数。我的第一个问题是:里面有什么会导致段错误的吗?
如果不是,那么第二个:那会返回什么?指针?我正在尝试使用以下 C 语句调用它:
这会导致段错误。
这也会导致段错误。
我之前使用以下代码声明了 c_error_message_():
声明一个返回类型与实际返回类型不同的函数会导致段错误吗?
我不知所措。感谢您的任何回复。
c++ - 将 fortran 77 函数传递给 C/C++
是否可以将 fortran 77 函数作为回调函数指针传递给 C/C++?如果是这样,如何?
我在网上找到的信息与 fortran 90 及更高版本有关,但我的旧代码库在 77 中。
非常感谢
c++ - 在 Visual Studio 中调用 C/C++ 代码形成 fortran 程序?(如何在 Visual Studio 中编译混合的 C 和 fortran 代码)
我正在寻找一种方法,如何将 c++ 代码与 fortran 代码集成(我只想在 fortran 代码中调用一些 C/C++ 函数)。
我找到了一些关于 gcc 或控制台编译器的建议,但我不知道如何翻译这种方法来解决 Visual Studio 中的集成问题。
当时我正在考虑创建一个 dll 形式的 c++ 代码并从 Fortran 代码中调用它。
有人已经看到解决方案了吗?或者从 dll 调用函数的开销是什么?我的 fortran 代码将大量内存转移到 C 函数中,是否有任何问题,如果我会用 dll 解决这个问题?
谢谢。
PS 我正在使用 Visual Studio 2008 Prof 和 Intel 编译器 10
PPS 我认为,我必须更具体地指定我想要的:我想在 Visual Studio 中编译一个 fortran 项目,它使用一些 C 函数。
c - 使用 Visual Studio 与 Intel Fortran 结合,如何解决使用不同类型的名称修饰
我已经获得了可爱的 fortran 和 c 代码网格程序。为了使该程序能够编译,它需要一系列从软件供应商处预编译的库。这包括英特尔 MKL、MPICH2 等。在 linux 上一切正常。但是在Windows上我被卡住了:
使用命令行,我可以通过以下两种方式使用 ifort 编译程序:
[ A ] ifort /Qlowercase /assume:underscore .......
[ B ] ifort /Quppercase /assume:nounderscore .... ……
如果我决定使用选项A,我会得到一系列缺失的符号,因为一些外部库是使用大写的下划线编译的,我无法解析这些符号。同样,如果我使用选项B,其他外部库会抱怨,因为它们是使用带下划线的小写字母编译的。
有没有办法在链接状态期间重新映射符号/功能?有没有其他选择?
python - 从python中的共享fortran库调用函数
我想从 Python 中的 Fortran 共享库中调用一些函数。我在网上找到了一些链接并阅读了它们,根据我的发现,我应该做
加载共享对象。但是,此共享对象包含来自另一个共享库的一些符号。我阅读了 cdll 的帮助,但是似乎无法同时加载多个共享对象文件。我如何调用这个 Fortran 库中的函数,它很可能是由英特尔 Fortran 编译器编译的?
fortran - 在 Fortran 中睡觉
有谁知道在 Fortran 中睡眠给定毫秒数的方法?我不想使用不可移植的系统调用,所以任何 Fortran 或 C 库固有的东西都是首选。
memory - 负数组索引和内存中的放置(指向)
在 fortran 中,您可以声明具有任何合适(整数)范围的数组,例如:
我相信fortran在通过引用传递时,总是会传递array(1)作为引用,但我不确定。
我正在使用fortran 指针,我相信fortran 指向的是“第一个”元素地址,即array(1),而不是array(-10)。但是我不确定。
Fortran 如何处理内存中的负数组索引?它是否定义了实施?
编辑:为了添加更多细节,我通过使用 fortran 指针指向地址将 malloc 块从 C 传递到 fortran,这是通过从 CIe C 中调用 fortran 例程来完成的:
fortran 点例程如下所示:
问题是,有时当它稍后尝试访问时说:
我不确定这是访问块开头的地址还是之前的某个地址。我现在认为这是实现定义的,但想知道每个实现的细节。
c - 分段错误 C 和 fortran
------ main.c----------
------ 你好.f90 --------
当我通过数组元素循环时:
我得到一个分段错误。
当我写时它不会发生:
c - 通过 ac 包装器使用 Gnu Scientific Library 的 Fortran 程序没有输出
我正在尝试编写一个包装器以将 gsl 库与 Fortran 一起使用。我设法让一个简单的包装器工作 - 来自http://www.helsinki.fi/~fyl_tlpk/luento/ohj-13-GSL-e.html的示例
Fortran 代码
函数
这一切都很好。但是,我在使用更复杂的包装器时遇到了问题。我从http://apwillis.staff.shef.ac.uk/aco/freesoftware.html的示例修改了以下代码
c 包装器 (rng_initialise.c)
Fortran 主程序 (main.f90)
然后我编译并链接
当我运行这个程序时,我没有得到任何输出。但是,如果我注释掉 rng_initialise 中的行
然后我从 Fortran 代码中获得输出(它将“calling_rng_initialise”写入 STDOUT)。
所以,问题似乎是对 gsl_rng_alloc 和 gsl_rng_set 的调用。但是我没有收到任何错误消息,我不知道他们为什么会阻止 Fortran 代码做任何事情。有任何想法吗?
c - 混合编程 Fortran 和 C
我是一名理论物理学研究生,在宇宙学工作。在我的研究过程中,我使用了相当庞大的 Fortran 代码库,并且我使用 C 来满足我的编程需求。
我已经能够在许多测试文件中链接这两个程序,它们运行良好。但对他们来说,我一直在使用目标文件来链接它们。但是当我试图通过 C 运行真正的交易时,包括对 Fortran 头文件的引用。它们似乎可以很好地集成和相互调用,但是 Fortran 头文件的格式与 C 编译器不兼容,因此当它跳转到头文件时,它开始抛出无法理解语法的错误。
例如,Fortran 头文件使用 real*8 定义双变量,因此当 C 读取它们时会引发错误。文件中的注释也是如此。
所以,我想问有没有什么办法可以解决这个问题?即通过C使fortran格式的头文件可读。
我浏览了互联网,发现了令人困惑的答案,我不知道该遵循哪一个。对此问题的任何帮助将不胜感激:)