gfortran LAPACK“未定义引用”错误

时间:2013-12-18 22:05:38

标签: ubuntu fortran gfortran lapack

我按照the instruction

在Ubuntu上安装了LAPACK
sudo apt-get install liblapack-dev

因此我可以找到/usr/lib/libblas/libblas.a/usr/lib/lapack/liblapack.a,然后使用randomsys1 examplegfortran中对其进行测试,

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

但是我收到了以下错误(dgesv是一个LAPACK例程):

/tmp/ccnzuuiY.o: In function `MAIN__':
randomsys1.f90:(.text+0xb): undefined reference to `init_random_seed_'
randomsys1.f90:(.text+0x3c2): undefined reference to `dgesv_'
collect2: ld returned 1 exit status

安装LAPACK有什么问题吗?非常感谢!

1 个答案:

答案 0 :(得分:5)

请参阅gcc/gfortran documentation

  

-llibrary,   -l library

     

链接时搜索名为library的库。 (第二种方法是将库作为单独的参数,仅适用于POSIX   合规,不推荐。)

     

在您编写此选项的命令中,它会有所不同;链接器搜索并处理库中的库和目标文件   他们是指定的。因此,'foo.o -lz bar.o'搜索库'z'   在文件foo.o之后但在bar.o之前如果bar.o指的是函数   'z',可能无法加载这些函数。

     

链接器搜索库的标准目录列表,该库实际上是名为liblibrary.a的文件。接着然后   使用此文件,就好像它已按名称精确指定一样。

     

搜索的目录包括几个标准系统目录以及您使用-L指定的任何目录。

     

通常,以这种方式找到的文件是库文件 - 归档文件,其成员是目标文件。链接器处理归档文件   通过它扫描定义到目前为止的符号的成员   被引用但未定义。但是,如果找到的文件是   普通的目标文件,它以通常的方式链接。唯一的   使用-l选项和指定文件名之间的区别是   -l用'lib'和'.a'包围库并搜索几个   目录。

所以你必须先放-L/directory/of/the/library所以编译器知道包含你的库的目录,然后 -llibrary标志。