gfortran LAPACK“未定义参考”错误

按照说明 ,我在Ubuntu上安装了LAPACK,

sudo apt-get install liblapack-dev 

因此我可以find/usr/lib/libblas/libblas.a/usr/lib/lapack/liblapack.a ,然后用randomsys1例子在gfortrantesting它,

  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有什么不对吗? 非常感谢!

请参阅gcc / gfortran文档 :

-llibrary-l library

链接时搜索名为library的库。 (另一个与库作为单独的参数的替代方案仅适用于POSIX规范,不建议使用。)

这在你写这个选项的命令中有所不同, 链接器将按照指定的顺序搜索和处理库和对象文件。 因此,'foo.o -lz bar.o'在文件foo.o之后但在bar.o之前搜索库“z”。 如果bar.o引用“z”中的函数,则可能不会加载这些函数。

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

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

通常以这种方式找到的文件是库文件 – 其成员是对象文件的归档文件。 链接器通过扫描档案文件来处理定义到目前为止被引用但未定义的符号的成员。 但是,如果找到的文件是一个普通的目标文件,它将以通常的方式链接。 使用-l选项和指定文件名的唯一区别在于-l围绕着使用“lib”和“.a”的库并搜索多个目录。

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