将gfortran链接到LAPACK和BLAS时出错

时间:2016-01-26 04:21:16

标签: fortran gfortran lapack blas

我在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)。提前感谢您指出使用fortran编译gfortran代码的正确方法。

2 个答案:

答案 0 :(得分:2)

试一试

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

答案 1 :(得分:0)

我有同样的问题。我遵循了上面的建议, 有效。这是我的工作示例批处理文件(必须执行 在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