将 gfortran 链接到 LAPACK 和 BLAS 时出错
Error in linking gfortran to LAPACK and 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
根据我的理解,link gfortran
与 lapack
和 blas
的推荐方式(请参考 gfortran LAPACK “undefined reference” error)。预先感谢您指出使用 gfortran
编译 fortran
代码的正确方法。
试试这个
gfortran randomsys1.f90 -L/usr/lib -llapack -L/usr/lib -lblas
我认为你走得太远了一个目录
我使用 LAPACK 特征求解器编写了一个程序,下面是我如何在自己的计算机上成功编译它。它用于计算 spring-mass 系统的模式。
gfortran eigen.f90 -L/usr/local/lib -lblas -L/usr/local/lib -llapack
这也适用于我的电脑
gfortran eigen.f90 -lblas -llapack
我刚刚都试了验证。
PS,既然你知道如何编译,我想你需要在你的程序中使用子例程 init_random_seed(在 "contains" 之后但在 "end program" 之前)。这个来自 google。不知道这是否是您需要的,您的教授应该能够在这里正确引导您。
! 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
我遇到了同样的问题。我遵循了上面的建议并且
有效。这是我的工作示例批处理文件(必须执行
在 cmd window):
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
我在 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
根据我的理解,link gfortran
与 lapack
和 blas
的推荐方式(请参考 gfortran LAPACK “undefined reference” error)。预先感谢您指出使用 gfortran
编译 fortran
代码的正确方法。
试试这个
gfortran randomsys1.f90 -L/usr/lib -llapack -L/usr/lib -lblas
我认为你走得太远了一个目录
我使用 LAPACK 特征求解器编写了一个程序,下面是我如何在自己的计算机上成功编译它。它用于计算 spring-mass 系统的模式。
gfortran eigen.f90 -L/usr/local/lib -lblas -L/usr/local/lib -llapack
这也适用于我的电脑
gfortran eigen.f90 -lblas -llapack
我刚刚都试了验证。
PS,既然你知道如何编译,我想你需要在你的程序中使用子例程 init_random_seed(在 "contains" 之后但在 "end program" 之前)。这个来自 google。不知道这是否是您需要的,您的教授应该能够在这里正确引导您。
! 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
我遇到了同样的问题。我遵循了上面的建议并且 有效。这是我的工作示例批处理文件(必须执行 在 cmd window):
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