问题标签 [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 投票
3 回答
1552 浏览

c++ - 返回数组的 FORTRAN 函数会导致段错误(从 C++ 调用)

基本上,这是我的问题。我正在从我的 C++ 代码中调用其他人的 FORTRAN 函数,这让我很头疼。一些代码:

这就是 FORTRAN 函数。我的第一个问题是:里面有什么会导致段错误的吗?

如果不是,那么第二个:那会返回什么?指针?我正在尝试使用以下 C 语句调用它:

这会导致段错误。

这也会导致段错误。

我之前使用以下代码声明了 c_error_message_():

声明一个返回类型与实际返回类型不同的函数会导致段错误吗?

我不知所措。感谢您的任何回复。

0 投票
1 回答
2471 浏览

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

是否可以将 fortran 77 函数作为回调函数指针传递给 C/C++?如果是这样,如何?

我在网上找到的信息与 fortran 90 及更高版本有关,但我的旧代码库在 77 中。

非常感谢

0 投票
6 回答
6242 浏览

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 函数。

0 投票
1 回答
761 浏览

c - 使用 Visual Studio 与 Intel Fortran 结合,如何解决使用不同类型的名称修饰

我已经获得了可爱的 fortran 和 c 代码网格程序。为了使该程序能够编译,它需要一系列从软件供应商处预编译的库。这包括英特尔 MKL、MPICH2 等。在 linux 上一切正常。但是在Windows上我被卡住了:

使用命令行,我可以通过以下两种方式使用 ifort 编译程序:
[ A ] ifort /Qlowercase /assume:underscore .......
[ B ] ifort /Quppercase /assume:nounderscore .... ……

如果我决定使用选项A,我会得到一系列缺失的符号,因为一些外部库是使用大写的下划线编译的,我无法解析这些符号。同样,如果我使用选项B,其他外部库会抱怨,因为它们是使用带下划线的小写字母编译的。

有没有办法在链接状态期间重新映射符号/功能?有没有其他选择?

0 投票
3 回答
6754 浏览

python - 从python中的共享fortran库调用函数

我想从 Python 中的 Fortran 共享库中调用一些函数。我在网上找到了一些链接并阅读了它们,根据我的发现,我应该做

加载共享对象。但是,此共享对象包含来自另一个共享库的一些符号。我阅读了 cdll 的帮助,但是似乎无法同时加载多个共享对象文件。我如何调用这个 Fortran 库中的函数,它很可能是由英特尔 Fortran 编译器编译的?

0 投票
3 回答
11279 浏览

fortran - 在 Fortran 中睡觉

有谁知道在 Fortran 中睡眠给定毫秒数的方法?我不想使用不可移植的系统调用,所以任何 Fortran 或 C 库固有的东西都是首选。

0 投票
2 回答
6123 浏览

memory - 负数组索引和内存中的放置(指向)

在 fortran 中,您可以声明具有任何合适(整数)范围的数组,例如:

我相信fortran在通过引用传递时,总是会传递array(1)作为引用,但我不确定。

我正在使用fortran 指针,我相信fortran 指向的是“第一个”元素地址,即array(1),而不是array(-10)。但是我不确定。

Fortran 如何处理内存中的负数组索引?它是否定义了实施?

编辑:为了添加更多细节,我通过使用 fortran 指针指向地址将 malloc 块从 C 传递到 fortran,这是通过从 CIe C 中调用 fortran 例程来完成的:

fortran 点例程如下所示:

问题是,有时当它稍后尝试访问时说:

我不确定这是访问块开头的地址还是之前的某个地址。我现在认为这是实现定义的,但想知道每个实现的细节。

0 投票
1 回答
761 浏览

c - 分段错误 C 和 fortran

------ main.c----------

------ 你好.f90 --------

当我通过数组元素循环时:

我得到一个分段错误。

当我写时它不会发生:

0 投票
3 回答
1295 浏览

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 代码做任何事情。有任何想法吗?

0 投票
2 回答
2532 浏览

c - 混合编程 Fortran 和 C

我是一名理论物理学研究生,在宇宙学工作。在我的研究过程中,我使用了相当庞大的 Fortran 代码库,并且我使用 C 来满足我的编程需求。

我已经能够在许多测试文件中链接这两个程序,它们运行良好。但对他们来说,我一直在使用目标文件来链接它们。但是当我试图通过 C 运行真正的交易时,包括对 Fortran 头文件的引用。它们似乎可以很好地集成和相互调用,但是 Fortran 头文件的格式与 C 编译器不兼容,因此当它跳转到头文件时,它开始抛出无法理解语法的错误。

例如,Fortran 头文件使用 real*8 定义双变量,因此当 C 读取它们时会引发错误。文件中的注释也是如此。

所以,我想问有没有什么办法可以解决这个问题?即通过C使fortran格式的头文件可读。

我浏览了互联网,发现了令人困惑的答案,我不知道该遵循哪一个。对此问题的任何帮助将不胜感激:)