问题标签 [gfortran]

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 投票
1 回答
192 浏览

gcc - 用于停止生成任何浮点指令的 gcc/gfortran 编译器标志/选项

我正在使用 PIN/LLVM 进行一些分析,我想知道是否有关闭浮点 x87 协处理器指令(如 FMUL、FLD 等)的生成。

本质上可以通过编译器标志等轻松完成的事情。

0 投票
1 回答
14656 浏览

fortran - 如何将输出写入fortran中的字符串?

我需要将格式化输出写入字符串DTSTR。它用于在layhe fortran下工作,但不适用于gfortran

它只是一个空行。如果我使用以下正确输出。但我想存储这个字符串。是否可以使用 gnu fortran 做到这一点。

更新

我正在尝试编译以下文件。我认为问题可能出在 COMMON 上。

0 投票
2 回答
409 浏览

c++ - Fortran 77 处理 C++ 内存分配

我正在尝试编写一个使用数万行 Fortran 77 代码的 C++ 程序,但遇到了一些奇怪的错误。我将三个坐标 (x,y,z) 和三个向量的地址从 C++ 传递到 fortran,然后让 fortran 在初始点上运行一些计算并在三个向量中返回结果。

我在一个 C++ 函数中这样做了几百次,离开那个函数,然后再回来做。它第一次完美运行,但第二次停止返回有用的结果(返回 nan),用于具有正 x 分量的点。

最初它似乎是一个算法问题,除了三件事:

  1. 我运行它的前 200 次它运行良好
  2. 如果我从 fortran 调用它并完全消除 C++,它就可以工作(对于最终程序不可行)
  3. 我尝试将打印语句添加到 fortran 以调试出错的地方,但事实证明,如果我将打印语句添加到特定的子例程(甚至像 PRINT *,'Here' 这样简单的东西),程序甚至在第一次运行。

这就是为什么我认为这与 C 和 fortran 函数/子例程调用之间如何分配和释放内存有关。基本设置如下所示: C++:

p>

Fortran:

p>

你们有没有看到我正在创建的任何明显的内存问题?也许 fortran 认为存在但实际上被 C++ 释放的常见块?没有使用打印语句进行调试的能力,也没有时间尝试理解别人的几千行 Fortran 77 代码,我愿意尝试任何你们可以建议或想到的任何事情。

我使用 g++ 4.5.1 编译 C++ 代码和最终链接,使用 gfortran 4.5.1 编译 fortran 代码。

谢谢

**编辑:**

我已经将错误追溯到我出生之前编写的一些晦涩的代码片段。它似乎正在寻找多年来在更新中删除的一些常见变量。我不知道为什么它只影响一个维度,也不知道为什么通过添加打印语句可以复制该错误,但我仍然消除了它。谢谢大家的帮助。

0 投票
1 回答
1450 浏览

gfortran - 如何让 gfortran 进行 INTEGER - LOGICAL 转换

据此 gfortran 可以进行整数逻辑转换,但我收到此错误:

我知道将代码从 更改为 会更好.not.bDropped(bDropped.eq.0)但这并不简单,因为它是生成的代码。

我尝试了各种-std=xxx标志,但它们没有任何区别。

0 投票
2 回答
572 浏览

fortran - 对于不属于标准的 FORTRAN 内在函数,我该怎么办?

我正在尝试通过使用 gfortran 从源代码构建旧的 FORTRAN 代码来工作。我终于能够成功构建它,但是现在它运行时出现了越界错误。我使用 gdb 并将错误跟踪到使用 loc() 内部函数的函数。当我尝试打印 的值时loc(ae),其中 ae 是我传递的整数值,我收到错误“当前上下文中没有符号“loc”。” 我尝试使用 ifort 11.x 进行编译并使用 DDT 进行调试并得到相同的错误。对我来说,这意味着编译器对内在函数一无所知。

一点阅读表明 loc 内在函数不是 F77 标准的一部分,所以也许这就是问题的一部分。我在下面发布了内在函数的定义,但我不知道如何将其实现到我的代码中,以便可以使用 loc() 。

有什么建议还是我误解了我的问题?因为 gfortran 和 ifort 由于越界错误而在同一个地方崩溃,但是使用 loc() 的函数在两个编译器之间返回相同的大数字。如果两个编译器都返回相同的 loc 值,loc() 将不起作用,这似乎有点奇怪。

用法:

iaddr = loc(obj)

在哪里:

obj 是需要其地址的变量、数组、函数或子程序。iaddr 是地址为“obj”的整数。地址的格式与 LARn 指令存储的格式相同。

描述:

LOC 用于获取某物的地址。返回的值在 Fortran 中并不是真正有用,但可能需要 GMAP 子例程或非常特殊的调试。

0 投票
1 回答
2317 浏览

powershell - 使用带有 Code::Blocks 的 PowerShell

我的机器是Win 7。

如何将 Code::Blocks shell 从 cmd 更改为 PowerShell?Code:Blocks 使用 cmd 作为外壳,但我希望他将使用 PowerShell。我怎样才能做到这一点?我的编译器是 gfortran。

约翰

0 投票
1 回答
1849 浏览

fortran - 进度条在 gfortran 中时没有在 ifort 中连续写入

我在 Fortran 中编写了一个遗传算法,以便能够以长双精度计算通用适应度函数。第一个版本(双精度)是为 gfortran 编写的,我在其中实现了一个进度条。

现在我必须用 ifort 编译,因为 gfortran 无法执行real*16计算。一切正常,但在这种情况下(ifort)进度条无法正常工作。也就是说,只有当整个循环完成时,进度条才会打印到标准输出。

这是进度条的一段代码:

我使用 64 位的 Intel Xeon,ifort 的选项是:

而当使用 gfortran 时,我以这种方式编译:

在 gfortran (但双精度)中一切正常。

0 投票
1 回答
278 浏览

fortran - 变量在调用子程序后奇怪地取零值

我在尝试将以前用 compaq visual fortran 6.6 编译的代码转换为 gfortran 时遇到了一些问题。
这是我在 gfortran 中遇到的一个具体问题:
有一个名为“et”的变量,其值为 3E+10。然后程序调用一个子程序。“et”没有出现在子程序中,但在回到主程序后,它现在的值为 0。
当使用 compaq visual fortran 进行编译时,我没有遇到这个问题。
我正在编写的代码是一个巨大的科学程序,所以我只在下面放了一小部分:

: "et" 保持良好的值,直到调用子程序 "perm" 之前。就在这个子程序之后,它的值为零。
“et”不在任何公共块中
这段代码是由几个不同子例程调用的子例程的一部分。更奇怪的是,当在代码的其他部分调用它时,我没有这个问题(“et”保持它的值)
所以如果有人遇到过这种问题或对此有任何想法,我会不胜感激

0 投票
1 回答
3493 浏览

arrays - 遍历 FORTRAN 字符数组

好的,我在使用以下 Fortran 90 代码时遇到了很多麻烦。程序测试人员应该创建一个名为 input 的字符数组,将所有条目初始化为空格字符,然后从用户那里获取一些字符串并将其存储在 input 中。getLength 函数应该返回函数中不是空格的最后一个索引;所以如果用户输入字符串“你好,你好吗?”,那么 getLength(input) 应该返回 11。它应该从给定数组的末尾开始工作,并标记第一个非空格字符出现的位置. 当我实际尝试运行它时,gfortran 说:“错误:在 (1) (REAL(4)/INTEGER(4)) 处返回函数 getLength 的类型不匹配。这是什么意思,我做错了什么,以及如何我应该修复它吗?提前致谢!

0 投票
11 回答
32303 浏览

r - 构建 R 包和错误“ld:找不到 -lgfortran”

我正在尝试安装软件包 lars。Ubuntu 11.04 Natty 64 位。从建筑我得到:

gfortran 已安装,当我运行时gfortran --version我得到

gfortran --version GNU Fortran (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

sudo ldconfig -v给出错误

/sbin/ldconfig.real:无法统计 /usr/lib/libgfortran.so:没有这样的文件或目录

我已经删除并重新安装了 gfortran。我需要什么来解决这个问题?