问题标签 [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.
gcc - 用于停止生成任何浮点指令的 gcc/gfortran 编译器标志/选项
我正在使用 PIN/LLVM 进行一些分析,我想知道是否有关闭浮点 x87 协处理器指令(如 FMUL、FLD 等)的生成。
本质上可以通过编译器标志等轻松完成的事情。
fortran - 如何将输出写入fortran中的字符串?
我需要将格式化输出写入字符串DTSTR
。它用于在layhe fortran下工作,但不适用于gfortran
它只是一个空行。如果我使用以下正确输出。但我想存储这个字符串。是否可以使用 gnu fortran 做到这一点。
更新
我正在尝试编译以下文件。我认为问题可能出在 COMMON 上。
c++ - Fortran 77 处理 C++ 内存分配
我正在尝试编写一个使用数万行 Fortran 77 代码的 C++ 程序,但遇到了一些奇怪的错误。我将三个坐标 (x,y,z) 和三个向量的地址从 C++ 传递到 fortran,然后让 fortran 在初始点上运行一些计算并在三个向量中返回结果。
我在一个 C++ 函数中这样做了几百次,离开那个函数,然后再回来做。它第一次完美运行,但第二次停止返回有用的结果(返回 nan),用于具有正 x 分量的点。
最初它似乎是一个算法问题,除了三件事:
- 我运行它的前 200 次它运行良好
- 如果我从 fortran 调用它并完全消除 C++,它就可以工作(对于最终程序不可行)
- 我尝试将打印语句添加到 fortran 以调试出错的地方,但事实证明,如果我将打印语句添加到特定的子例程(甚至像 PRINT *,'Here' 这样简单的东西),程序甚至在第一次运行。
这就是为什么我认为这与 C 和 fortran 函数/子例程调用之间如何分配和释放内存有关。基本设置如下所示: C++:
Fortran:
你们有没有看到我正在创建的任何明显的内存问题?也许 fortran 认为存在但实际上被 C++ 释放的常见块?没有使用打印语句进行调试的能力,也没有时间尝试理解别人的几千行 Fortran 77 代码,我愿意尝试任何你们可以建议或想到的任何事情。
我使用 g++ 4.5.1 编译 C++ 代码和最终链接,使用 gfortran 4.5.1 编译 fortran 代码。
谢谢
**编辑:**
我已经将错误追溯到我出生之前编写的一些晦涩的代码片段。它似乎正在寻找多年来在更新中删除的一些常见变量。我不知道为什么它只影响一个维度,也不知道为什么通过添加打印语句可以复制该错误,但我仍然消除了它。谢谢大家的帮助。
gfortran - 如何让 gfortran 进行 INTEGER - LOGICAL 转换
据此, gfortran 可以进行整数逻辑转换,但我收到此错误:
我知道将代码从 更改为 会更好.not.bDropped
,(bDropped.eq.0)
但这并不简单,因为它是生成的代码。
我尝试了各种-std=xxx
标志,但它们没有任何区别。
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 子例程或非常特殊的调试。
powershell - 使用带有 Code::Blocks 的 PowerShell
我的机器是Win 7。
如何将 Code::Blocks shell 从 cmd 更改为 PowerShell?Code:Blocks 使用 cmd 作为外壳,但我希望他将使用 PowerShell。我怎样才能做到这一点?我的编译器是 gfortran。
约翰
fortran - 进度条在 gfortran 中时没有在 ifort 中连续写入
我在 Fortran 中编写了一个遗传算法,以便能够以长双精度计算通用适应度函数。第一个版本(双精度)是为 gfortran 编写的,我在其中实现了一个进度条。
现在我必须用 ifort 编译,因为 gfortran 无法执行real*16
计算。一切正常,但在这种情况下(ifort)进度条无法正常工作。也就是说,只有当整个循环完成时,进度条才会打印到标准输出。
这是进度条的一段代码:
我使用 64 位的 Intel Xeon,ifort 的选项是:
而当使用 gfortran 时,我以这种方式编译:
在 gfortran (但双精度)中一切正常。
fortran - 变量在调用子程序后奇怪地取零值
我在尝试将以前用 compaq visual fortran 6.6 编译的代码转换为 gfortran 时遇到了一些问题。
这是我在 gfortran 中遇到的一个具体问题:
有一个名为“et”的变量,其值为 3E+10。然后程序调用一个子程序。“et”没有出现在子程序中,但在回到主程序后,它现在的值为 0。
当使用 compaq visual fortran 进行编译时,我没有遇到这个问题。
我正在编写的代码是一个巨大的科学程序,所以我只在下面放了一小部分:
: "et" 保持良好的值,直到调用子程序 "perm" 之前。就在这个子程序之后,它的值为零。
“et”不在任何公共块中
这段代码是由几个不同子例程调用的子例程的一部分。更奇怪的是,当在代码的其他部分调用它时,我没有这个问题(“et”保持它的值)
所以如果有人遇到过这种问题或对此有任何想法,我会不胜感激
arrays - 遍历 FORTRAN 字符数组
好的,我在使用以下 Fortran 90 代码时遇到了很多麻烦。程序测试人员应该创建一个名为 input 的字符数组,将所有条目初始化为空格字符,然后从用户那里获取一些字符串并将其存储在 input 中。getLength 函数应该返回函数中不是空格的最后一个索引;所以如果用户输入字符串“你好,你好吗?”,那么 getLength(input) 应该返回 11。它应该从给定数组的末尾开始工作,并标记第一个非空格字符出现的位置. 当我实际尝试运行它时,gfortran 说:“错误:在 (1) (REAL(4)/INTEGER(4)) 处返回函数 getLength 的类型不匹配。这是什么意思,我做错了什么,以及如何我应该修复它吗?提前致谢!
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。我需要什么来解决这个问题?