gfortran LAPACK"未定义引用"错误

 步履乘风 发布于 2023-02-09 12:55

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

sudo apt-get install liblapack-dev

因此,我可以找到/usr/lib/libblas/libblas.a/usr/lib/lapack/liblapack.a,然后测试了它在gfortranrandomsys1实例,

  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 个回答
  • 请参阅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标志.

    2023-02-09 12:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有