问题标签 [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.
gfortran - 如何找出使用了哪个编译器:g77 或 gfortran
我正在为一个私人项目编译库,这取决于许多库。具体来说,其中一个依赖项是用 Fortran 编译的。在某些情况下,我看到使用 编译的依赖项g77
,在其他情况下,我看到使用 编译的依赖项gfortran
。然后我的项目./configure
将与-lg2c
or链接-lgfortran
,但到目前为止我一直在手动完成。
如果可能的话,我如何通过查看依赖库(通过例如nm
或其他一些实用程序?)找出使用的编译器是g77
(然后我将-lg2c
在我的链接选项中使用)还是gfortran
(然后我'会用-lgfortran
)?
提前致谢!
file - gfortran:如何控制 .mod 文件的输出目录
有没有办法将由 gfortran (GCC) 生成的 .mod 文件放入单独的输出目录中?我知道如何使用 -o 标志放置目标文件或其他输出,如下所示:
但是 .mod 文件(由上述调用生成)不受 -o 标志的影响,并放置在当前目录中。一些商业编译器有一个像 -qmoddir 这样的标志,但我找不到 gfortran 类似的东西。
如果没有这样的标志,是否可以在额外的步骤中生成 .mod 文件以使 -o 标志起作用?
fortran - 从 gfortran 读取 .dbf 文件的最简单方法是什么
我正在使用 gfortran,我需要编写一个从与 ESRI Shapefile 关联的 .dbf 文件中读取记录的函数。我应该能够阅读的文件可从互联网http://diss.rm.ingv.it/diss/DISS_3.0.4.shp.zip
该file
命令对文件格式的意见是:
感谢您的建议
matrix - BLAS 子程序 dgemm、dgemv 和 ddot 不适用于标量?
我有一个 Fortran 子程序,它使用 BLAS 的子程序 dgemm、dgemv 和 ddot,它们计算矩阵 * 矩阵、矩阵 * 向量和向量 * 向量。我有 m * m 矩阵和 m * 1 向量。在某些情况下,m=1。在这些情况下,这些子程序似乎不能很好地工作。他们没有给出错误,但结果似乎存在一些数值上的不稳定性。所以我必须写一些类似的东西:
所以我的实际问题是,当 m=1 时,那些 BLAS 的子例程不能正常工作,或者我的代码中是否有问题,我是对的吗?编译器会影响这个吗?我正在使用 gfortran。
compilation - 从 gfortran 移植到 ifort 时出现编译错误
我正在尝试将程序从 gfortran 移植到 ifort(英特尔 Fortran 编译器 11)。我遇到了两个只能用 gfortran 编译的文件:
当我尝试使用这些文件运行 intel fortran 编译器时,我得到:
并且没有创建目标文件。
现在,我该如何解决这个问题o_O?
编辑:将文件扩展名从 ff 重命名为 fpp
帮助:
http://www.rcac.purdue.edu/userinfo/resources/black/userguide.cfm#compile_fortran_cpp
更新:有没有办法让 intel fortran 编译器工作而不必重命名文件?
static - 与 gfortran 和 gcc 静态链接的混合语言
我有一些用 C 和 Fortran 编写的代码,我想编译成静态链接的可执行文件。如果我动态编译代码(使用-fno-underscoring
gfortran 的选项),一切正常。不过,我想把它链接成一个.so文件,静态链接大部分需要的库,然后动态链接到libkrb5
,很像这篇博文中描述的方法。
我按照上一篇博文中的步骤,成功地编译了 .so 库,没有任何问题。nm
表明它状态良好,我的 Fortran 子例程和 C 函数出现了:
第一个函数是用 Fortran 编写的,第二个函数是用 C 编写的。它们没有下划线或任何东西,所以它们应该链接。我的主程序(在 Fortran 中)像其他 Fortran 源文件一样编译。但是,当我尝试链接时,出现错误:
collect2: ld 返回 1 个退出状态
在main_program.o
中,我可以看到有
一切看起来都井井有条,为什么它没有链接?
fortran - 使用 gfortran 在 Fortran 90 中编写和调用纯子例程
使用 gfortran 在 Fortran 90 中编写和调用纯子例程时,如何找出编译器发出此错误的原因?
我将尝试尽可能具体地提出我的问题,同时又足够笼统以对其他人有用,因此我将避免粘贴我的实际代码,而是会勾勒出发生的事情。
我知道 Fortran 90 中有关于纯过程的各种规则,我认为这些规则基本上可以归结为不允许函数或子例程中的副作用,并且不允许更改用intent(in)
. 我有一系列最初没有声明为纯的子程序,其参数没有声明意图,但仍然没有执行副作用。首先,我将所有参数声明更改为具有明确声明的意图,即in
、out
或inout
。然后,我将所有子例程声明为PURE
. 当然,第一次尝试时出现了很多错误,但是编译器告诉我错误是什么(例如intent(in)
正在修改某某参数),所以我一个一个地修复了它们。
但是,这些程序之间存在调用,所以现在我仍然收到许多如上所示形式的错误:Subroutine call to XXXX at (1) is not PURE
. 我不明白为什么这个电话不纯。我已经做了所有我能想到的让 XXXX 纯净的事情,但编译器仍然认为它不是。
所以我的问题——改写——是:我如何让 gfortran 告诉我为什么它认为 XXXX 不纯?
fortran - 每次使用 gfortran Fortran 90 程序写入后,如何将输出刷新到文件?
我在 Fortran 90 程序中运行一个循环,该程序为循环的每次迭代将数值输出到输出文件。问题是输出没有保存到文件中,而是每隔这么多步骤。我如何让它冲洗每一步?
示例代码:
提前致谢。
pointers - Fortran 指针函数:为什么此代码的行为取决于函数调用的顺序?
语境
下面发布的玩具 Fortran 代码调用了两个指针函数。也就是说,两个函数都返回一个指针。事实上,它们都是数组指针。它们都试图做同样的事情,即返回一个整数数组指针,该指针引用一个具有三个元素 1、2 和 3 的整数数组。第一个函数使用指针赋值运算符 (=>) 将函数指针指向保存数据的可分配数组。第二个函数通过指针直接分配一块动态内存,用于存储数据。调用程序只打印返回数组的元素。
这就是我觉得奇怪的地方。
- 如果我指向
a
的结果function1
,则结果不正确。的第一个元素a
似乎被“破坏”了:a
has0
,2
,3
. - 如果我指向
b
的结果function2
,则结果是正确的。b
得到1
,2
,3
. - 更奇怪的是,指向改变后的
b
结果,使其变得正确。 然后有, , .function2
a
function1
a
a
1
2
3
问题
为什么会出现这种情况?更准确地说,为什么返回指向可分配数组的指针的指针函数会为调用者破坏该数组的第一个元素?更准确地说,为什么指向一个指针 ( b
) 会对另一个指针 ( ) 产生副作用a
,其中目标来自不同的函数,这些函数被编写为根本不相互交互?
注意事项
我使用 GNU Fortran 编译器 v.4.3.3 获得此行为,运行带有 Ubuntu (Jaunty) 的英特尔笔记本电脑。您的结果可能会有所不同,这可能会更有趣。最后,和往常一样,这可能是我的操作员错误,这至少对我来说很有趣。
代码
macos - 如何制作在 Mac OS X 10.5 和 10.6 上运行的 fortran 可执行文件
我想用 gfortran 编译一个 fortran 代码,这样它就可以在 Mac OS X 10.5 和 10.6 上运行。有没有办法做到这一点?我尝试在 10.6 上编译并在 10.5 上运行可执行文件时收到此消息:
dyld:未知所需的加载命令 0x80000022 跟踪/BPT 陷阱