【问题标题】:Error in linking gfortran to LAPACK and BLAS将 gfortran 链接到 LAPACK 和 BLAS 时出错
【发布时间】:2016-01-26 04:21:15
【问题描述】:

我已经从 Ubuntu 的 Synaptic 包管理器中安装了 LAPACK 和 BLAS。

whereis libblas
libblas: /usr/lib/libblas.so /usr/lib/libblas.a /usr/lib/libblas

whereis liblapack
liblapack: /usr/lib/liblapack.a /usr/lib/liblapack.so

当我尝试用gfortran 编译randomsys1 example 时,我收到以下错误消息。

gfortran randomsys1.f90 -L/usr/lib/lapack -llapack -L/usr/lib/libblas -lblas
/tmp/cclwtifh.o: In function `MAIN__':
randomsys1.f90:(.text+0x12): undefined reference to `init_random_seed_'
collect2: error: ld returned 1 exit status

gfortran randomsys1.f90 -llapack -lblas
/tmp/ccB1isEC.o: In function `MAIN__':
randomsys1.f90:(.text+0x12): undefined reference to `init_random_seed_'
collect2: error: ld returned 1 exit status

据我了解,建议将gfortranlapackblas 链接(请参阅gfortran LAPACK “undefined reference” error)。提前感谢您指出使用gfortran 编译fortran 代码的正确方法。

【问题讨论】:

    标签: fortran gfortran lapack blas


    【解决方案1】:

    试试这个

    gfortran randomsys1.f90 -L/usr/lib -llapack -L/usr/lib -lblas
    

    我认为你走得太远了

    我使用 LAPACK eigensolver 编写了一个程序,这是我在自己的计算机上成功编译它的方法。它用于计算弹簧质量系统的模式。

    gfortran eigen.f90 -L/usr/local/lib -lblas -L/usr/local/lib -llapack
    

    这也适用于我的电脑

    gfortran eigen.f90 -lblas -llapack
    

    我只是尝试了两者来验证。

    PS,既然您知道如何编译,我认为您需要在程序中使用子例程 init_random_seed(在“包含”之后但在“结束程序”之前)。这个来自谷歌。不知道是不是你需要的,你的教授应该可以在这里正确引导你。

    ! Initialize the random number generator using current time,
    ! so a new sequence of random numbers is generated each 
    ! execution time.
    
    ! Taken from http://gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html
    
        SUBROUTINE init_random_seed()
            INTEGER :: i, n, clock
            INTEGER, DIMENSION(:), ALLOCATABLE :: seed
    
            CALL RANDOM_SEED(size = n)
            ALLOCATE(seed(n))
    
            CALL SYSTEM_CLOCK(COUNT=clock)
    
            seed = clock + 37 * (/ (i - 1, i = 1, n) /)
            CALL RANDOM_SEED(PUT = seed)
    
            print *, "Using random seed = ", seed
            print *, " "
    
            DEALLOCATE(seed)
        END SUBROUTINE
    

    【讨论】:

    • 非常感谢!您正确地指出 init_random_seed 子程序丢失了。包含您提供的子程序后,我可以使用命令gfortran randomsys1.f90 -lblas -llapack 编译它。
    • 代码似乎与gcc.gnu.org/onlinedocs/gfortran/RANDOM_005fSEED.html 中的不匹配,可能有更新?
    • @Rajarshi,你能正式接受我的回答(回答左上角)吗?我的任务是获得更多积分!
    【解决方案2】:

    我遇到了同样的问题。我遵循了上面的建议, 有效。这是我的工作示例批处理文件(必须执行 在 cmd 窗口中):

    gfortran -c for\kurs_evd.f90
    gfortran -o kurs_evd.exe kurs_evd.o charint.o -L/usr/lib -llapack -L/usr/lib -lblas
    kurs_evd.exe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      相关资源
      最近更新 更多