标签: gfortran

迫使gfortran在第一次NaN停止计划

为了调试我的应用程序(fortran 90),我想将所有NaN转换为信令NaN.

使用默认设置,我的程序无需任何信号即可工作,只输出文件中的NaN数据.我想找到生成NaN的点.如果我可以用信号NaN重新编译程序,我会SIGFPE在第一个错误的浮动操作所在的第一点得到一个信号.

gcc fortran nan gfortran

15
推荐指数
1
解决办法
9439
查看次数

如何覆盖fortran中的结构构造函数

目前是否可以覆盖Fortran中的结构构造函数?我已经看到过像这样的提议示例(例如在Fortran 2003规范中):

module mymod

  type mytype
    integer :: x
    ! Other stuff
  end type

  interface mytype
    module procedure init_mytype
  end interface

contains
  type(mytype) function init_mytype(i)
    integer, intent(in) :: i
    if(i > 0) then
      init_mytype%x = 1
    else
      init_mytype%x = 2
    end if
  end function
end

program test
  use mymod
  type(mytype) :: x
  x = mytype(0)
end program
Run Code Online (Sandbox Code Playgroud)

由于冗余变量名称(例如,'mytype'的错误:DERIVED属性与(1)处的PROCEDURE属性冲突),这基本上会产生一堆错误.fortran 2003示例的逐字副本会产生类似的错误.我在gfortran 4.4,ifort 10.1和11.1中尝试了这个,它们都产生了相同的错误.

我的问题:这只是2003年fortran的一个未实现的功能吗?或者我是否错误地实施了这个?

编辑:我遇到过一个错误报告和gfortran关于这个问题的公告补丁.但是,我尝试使用11月版的gcc46没有运气和类似的错误.

编辑2:上述代码似乎可以使用英特尔Fortran 12.1.0.

constructor fortran gfortran user-defined-types

14
推荐指数
2
解决办法
6982
查看次数

Fortran派生类型赋值

假设我有一个Fortran派生类型

type :: atype
    integer :: n
    integer :: a(10)
    integer, allocatable :: b(:)
 end type
Run Code Online (Sandbox Code Playgroud)

我有两个这种类型的实例

type(atype) :: t1, t2
Run Code Online (Sandbox Code Playgroud)

当我做以下任务时到底发生了什么?

t2 = t1
Run Code Online (Sandbox Code Playgroud)

我对此感兴趣,因为我想正确地创建派生类型变量的副本意味着,标量组件应该相等,数组组件的每个元素应该相等,并且可分配的数组应该具有相同的分配大小,并且元素应该相等.目前我只想写一个子程序,它正确地复制和分配组件.

subroutine copy_atype(from, to)
    type(atype) :: from, to
    to%n = from%n
    to%a = from%a
    if (allocated(to%b)) deallocate(to%b)
    if (allocated(from%b) then
        allocate(to%b(size(from%b)))
        to%b = from%b
    end if
end subroutine
Run Code Online (Sandbox Code Playgroud)

我希望指导标准中的相应部分.

我正在使用gfortran 4.7.

fortran gfortran fortran2003

14
推荐指数
1
解决办法
3414
查看次数

由于Ubuntu下的NumPy Fortran混音,Theano失败了

我在我的机器上安装了Theano,但是nosetests打破了Numpy/Fortran相关的错误消息.对我来说,看起来像Numpy编译的是与Theano不同的Fortran版本.我已经重新安装了Theano(sudo pip uninstall theano+ sudo pip install --upgrade --no-deps theano)和Numpy/Scipy(apt-get install --reinstall python-numpy python-scipy),但这没有帮助.

你会推荐什么步骤?

完整的错误消息:

ImportError: ('/home/Nick/.theano/compiledir_Linux-2.6.35-31-generic-x86_64-with-Ubuntu-10.10-maverick--2.6.6/tmpIhWJaI/0c99c52c82f7ddc775109a06ca04b360.so: undefined symbol: _gfortran_st_write_done'
Run Code Online (Sandbox Code Playgroud)

我的研究:

有关错误的安装SciPy/BuildingGeneral页面undefined symbol: _gfortran_st_write_done':

如果您看到错误消息

ImportError: /usr/lib/atlas/libblas.so.3gf: undefined symbol: _gfortran_st_write_done

在构建SciPy时,这意味着NumPy在构建期间选择了错误的Fortran编译器(例如ifort).

使用以下方法重新编译NumPy:

python setup.py build --fcompiler=gnu95

或以适当者为准(见python setup.py build --help-fcompiler).

但:

Nick@some-serv2:/usr/local/lib/python2.6/dist-packages/numpy$ python setup.py build --help-fcompiler
This is the wrong setup.py file to run
Run Code Online (Sandbox Code Playgroud)

二手软件版本:

  • scipy 0.10.1(scipy.test()有效)
  • NumPy 1.6.2(numpy.test()有效)
  • theano 0.5.0(几次测试失败undefined symbol: _gfortran_st_write_done')
  • python …

numpy gfortran scipy theano

13
推荐指数
2
解决办法
3148
查看次数

使用gdb和gfortran进行调试 - FPE

我正在调试我添加的更大的数字程序.它是用fortran90编写的,用gfortran编译(最新版本适用于Mac),我正在使用gdb进行调试(同样是Mac的最新版本).

我的添加有一个错误,我试图找到它,这是明确的,因为运行该程序不会产生预期的结果.当我在gdb中运行它时,我在结尾处得到以下输出:

Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG IEEE_DIVIDE_BY_ZERO IEEE_UNDERFLOW_FLAG IEEE_DENORMAL [Inferior 1 (process 83843) exited normally]

我想确定这个FPE的确切位置,但似乎浮点异常不会导致程序崩溃.我通过在我的代码中明确地除以0来测试它 - 它不会导致程序停止运行,但会导致意外行为.

什么是gdb或gfortran的正确标志,以确保程序在到达浮点异常时停止运行(理想情况下是回溯)?我尝试按照这里的说明进行操作,但似乎没有改变任何内容.

fortran gdb gfortran fortran90

13
推荐指数
1
解决办法
2万
查看次数

Mac OS XR错误"ld:警告:找不到选项的目录"

我试图从源代码安装R包,但收到错误:

* installing *source* package ‘mclust’ ...
** package ‘mclust’ successfully unpacked and MD5 sums checked
** libs
gfortran-4.8   -fPIC  -g -O2  -c mclust.f -o mclust.o
gfortran-4.8   -fPIC  -g -O2  -c mclustaddson.f -o mclustaddson.o
clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o mclust.so mclust.o mclustaddson.o -L/Library/Frameworks/R.framework/Resources/lib -lRlapack -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2 -lgfortran -lquadmath -lm -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation
ld: warning: directory not found for option '-L/usr/local/lib/gcc/x86_64-apple-darwin13.0.0/4.8.2'
ld: warning: directory not found for option …
Run Code Online (Sandbox Code Playgroud)

macos gcc fortran r gfortran

13
推荐指数
6
解决办法
1万
查看次数

R v3.4.0-2无法在Arch上找到libgfortran.so.3

我刚刚度假一个月,所以无法说明发生这种情况的确切点,但是R从官方的Arch repos现在无法启动,引用

/usr/lib64/R/bin/exec/R: error while loading shared libraries: 
libgfortran.so.3: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我认为也许一个符号链接被错误地放置或销毁,所以我查看了/ usr/lib来尝试找到它:

ls -halt /usr/lib/libgfortran.so.*

lrwxrwxrwx 1 root root   20 May 16 03:01 /usr/lib/libgfortran.so.4 -> libgfortran.so.4.0.0
-rwxr-xr-x 1 root root 7.1M May 16 03:01 /usr/lib/libgfortran.so.4.0.0
Run Code Online (Sandbox Code Playgroud)

libfortran.so.3libgfortran.so.4Arch 取代?如果是这样,是否有任何可能的解决方法R来运行旧版本?


pacman -Qi r

Name            : r
Version         : 3.4.0-2
Description     : Language and environment for statistical computing and graphics
Architecture    : x86_64
URL             : http://www.r-project.org/
Licenses …
Run Code Online (Sandbox Code Playgroud)

r gfortran archlinux pacman-package-manager

12
推荐指数
1
解决办法
6840
查看次数

"/ usr/bin/ld:找不到库"

这是我第一次尝试使用makefile编译FORTRAN代码.操作系统是Ubuntu 12.04 LTS 64位.我遇到了以下错误:

gfortran  -o przm3123.exe canopy.o chem.o cnfuns.o cropdate.o datemod.o debug.o debug_cn.o f2kcli.o floatcmp.o furrow.o general.o i_errchk.o infnan.o inivar.o ioluns.o iosubs.o lambertw.o m_readvars.o utils.o wind.o fcscnc.o przm3.o rsexec.o rsinp1.o rsinp2.o rsinp3.o rsmcar.o rsmisc.o rsprz1.o rsprz2.o rsprz3.o rsprzn.o rsutil.o rsvado.o -L ../libanne4.0/lib -lwdm -ladwdm -lutil
/usr/bin/ld: cannot find -lwdm
/usr/bin/ld: cannot find -ladwdm
collect2: ld returned 1 exit status
make: *** [przm3123.exe] Error 1
Run Code Online (Sandbox Code Playgroud)

makefile中的关键元素是:

przm2_LIBS = -L ../libanne4.0/lib -lwdm -ladwdm -lutil
Run Code Online (Sandbox Code Playgroud)

我有什么办法可以解决这个错误吗?我应该尝试其他编译器吗?

linker gcc fortran ld gfortran

11
推荐指数
1
解决办法
10万
查看次数

如何在Mac OS X Mountain Lion上编译可分发的Fortran二进制文件?

由于Apple已停止使用Xcode分发gfortran,我应该如何编译独立于架构的Fortran代码?我安装了Mac OS X Mountain Lion(10.8)和XCode 4.4,并安装了Command Line Tools软件包.

Apple的Native编译器

据我所知,Xcode C/C++/ObjC编译器使用GNU编译器集合的fork ,llvm作为后端; 后者我认为可以为英特尔和PPC架构编译和优化"通用"二进制文件.

第三方二进制Fortran编译器

HPC

我只找到一个网站,专门为Mountain Lion分发一个二进制版本的gfortran:HPC网站.但是,我没有把它编译成SciPy,后来在SciPy的自述文件中看到它"已知会产生错误的scipy二进制文件".

CRAN/R

SciPy推荐的(免费)Fortran编译器是CRAN R服务器上的编译器,但尚未针对Mountain Lion进行更新.它们提供了构建通用编译器的说明和脚本,但同样,尚未针对Mountain Lion更新它.

G95

G95项目一直没有自2010年以来的更新,所以我没有尝试..任何人试图在此山狮?

MacPorts的

我想这将是安装gfortran的最简单的方法,但是port search gfortran没有任何结果,而且我过去对MacPorts没有任何喜悦(对MacPorts没有任何冒犯;它看起来像一个非常活跃的项目,但我已经被Linux软件包管理员宠坏了,我最喜欢的经理是aptitude)所以在Mac OS X上,我从过去的源代码编译了软件和库.从来没有一个问题'直到现在......

构建Fortran编译器

在过去的几天里,我在互联网上挖了很多东西,我找到了其他的Fortran编译器,但我没有得到任何交叉编译通用二进制文件,或编译SciPy.

GCC - Gnu编译器集合

我编译了整个GCC集合(v4.6.3),包括autotools,automake,libtool和m4​​ - 就像GCC wiki这个博客描述的那样 - 但是由此产生的编译器没有编译通用二进制文件,可能是因为LLVM没有被用作后端.

DragonEgg

DragonEgg是一个"gcc插件,取代了GCC的优化器和代码生成器......与LLVM".这看起来很有趣,但我不知道我怎么会用它来编译"LLVM-gfortran-4.x版".可以这样做吗?

兼容性

图书馆

Xcode附带的编译器是(C的一个分支)GCC v4.2.但GCC目前的发布和开发分支机构分别是版本4.6和4.7.显然,GNU许可证的更改或某些东西阻止了Apple更新到更现代版本的GCC.那么,如果我要构建使用GCC的gfortran v4.6制作的动态库,那么它们是否可以与Xcode的本机编译器编译的C代码链接?至少,我认为产生的Mach-O二进制文件需要x86_64和i386代码路径.GCC是否向后兼容Apple的(forks of?)GCC?我知道gfortran有-ff2c旗帜,但这两个版本是否稳定?

编译标志

我从源代码构建的GCC Fortran编译器不支持使用 …

gfortran scipy xcode4.4 osx-mountain-lion

11
推荐指数
1
解决办法
1万
查看次数

在Fortran中分配时自动进行数组分配

我们最近发现我们正在为Fortran中的未分配数组进行分配.GNU gfortran编译器没有捕获错误,代码在OSX和Linux下运行.但是,IBM Power PC上的代码分段错误相同.

我的问题是,以下代码是否正确?似乎分配给的数组array在某些体系结构上自动分配内存,但在其他体系结构上则不然.是否有实施具体细节在这里工作?

代码是混合的C/Fortran代码:

#include <stdlib.h>

void assign_array_(double x[], int* n);
void print_array_();

int main()
{
    int n,i;
    double *x;

    n = 5;
    x = (double*) malloc(sizeof(double)*n);

    for (i = 0; i < n; i++)
        x[i] = (double) i;

    assign_array_(x,&n);
    print_array_();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和Fortran代码:

MODULE test_mod
  DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: array
  integer :: nsize
END MODULE test_mod

SUBROUTINE assign_array(x,n)
  USE test_mod
  IMPLICIT NONE

  INTEGER :: n
  DOUBLE PRECISION :: x(n)

  CALL test_allocated()
  array = …
Run Code Online (Sandbox Code Playgroud)

memory arrays fortran gfortran

11
推荐指数
2
解决办法
2577
查看次数