1

我下载并编译了 Openblas,现在我正在尝试编译并将 openblas 链接到 Suitesparse 4.4.4。编译所有 lib 文件后,当编译器尝试编译umfpack_di_demo.c时出现以下错误:

    ../Lib/libumfpack.a(umf_di_local_search.o):在函数“umfdi_local_search”中:
    umf_local_search.c:(.text+0x4c0): undefined reference to `dtrsv_'
    umf_local_search.c:(.text+0x634): 对“dgemv_”的未定义引用
    ../Lib/libumfpack.a(umf_di_blas3_update.o):在函数“umfdi_blas3_update”中:
    umf_blas3_update.c:(.text+0x11d): 未定义对“dtrsm_”的引用
    umf_blas3_update.c:(.text+0x1de): 未定义对“dgemm_”的引用
    umf_blas3_update.c:(.text+0x2ae): 对“dger_”的未定义引用

我的意思是链接不正确。但是,按照 SuiteSparse_config.mk 中的指示,我给出了 libopenblas.a 在我的系统上的绝对位置。此外,我还使用 gcc-nm 查看符号 dtrsv_ 是否在 libopenblas.a 中定义,我得到以下输出,表明该符号是在库中定义的:

    0000000000000000 T dtrsv_
                     U dtrsv_NLN
                     U dtrsv_NLU
                     U dtrsv_NUN
                     U dtrsv_NUU
                     U dtrsv_TLN
                     U dtrsv_TLU
                     U dtrsv_TUN
                     U dtrsv_TUU
                     U dtrsv_NLN
                     U dtrsv_NLU
                     U dtrsv_NUN
                     U dtrsv_NUU
                     U dtrsv_TLN
                     U dtrsv_TLU
                     U dtrsv_TUN
                     U dtrsv_TUU
    dtrsv_NUU.o:
    0000000000000000 T dtrsv_NUU
    dtrsv_NUN.o:
    0000000000000000 T dtrsv_NUN
    dtrsv_NLU.o:
    0000000000000000 T dtrsv_NLU
    dtrsv_NLN.o:
    0000000000000000 T dtrsv_NLN
    dtrsv_TUU.o:
    0000000000000000 T dtrsv_TUU
    dtrsv_TUN.o:
    0000000000000000 T dtrsv_TUN
    dtrsv_TLU.o:
    0000000000000000 T dtrsv_TLU
    dtrsv_TLN.o:
    0000000000000000 T dtrsv_TLN
                     U dtrsv_NLU
                     U dtrsv_NUN
                     U dtrsv_TLU
                     U dtrsv_TUN
                     U dtrsv_NLU
                     U dtrsv_NUN
                     U dtrsv_TLU
                     U dtrsv_TUN
                     U dtrsv_
                     U dtrsv_
                     U dtrsv_

我不确定这里出了什么问题。我应该在 suitesparse_config.mk 文件中包含带有 openblas 的 lapack 吗?任何帮助表示赞赏。谢谢。

注意:如果有帮助,我使用gcc 4.4.7进行所有编译,我的系统详细信息是:

    Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux

== 编辑1:我遵循的步骤==

对于 Openblas:

  1. 从 http://github.com/xianyi/OpenBLAS/zipball/v0.2.14 下载 openblas。
  2. 使用 gcc-4.4.7 和以下命令在我的系统上解压缩并编译它 make FC=/usr/bin/lgfortran-4.4 我必须提供 'FC' 因为我的系统没有 libgfortran.* 存在于 /usr/lib /。
  3. 编译完成后,我键入 make install 以安装到我的主文件夹中的自定义目录。

对于套件稀疏:

  1. 从 http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.4.tar.gz 下载suitesparse
  2. 解压它,并编辑 suitsparse_config.mk 文件以进行以下修改:A) 启用 CHOLMOD 和 SPQR 的 GPU 配置,B) 不使用 metis,因此注释“METIS_PATH = ../../metis-4.0”和“METIS = ../../metis-4.0/libmetis.a”。此外,未提交的“CHOLMOD_CONFIG = -DNPARTITION”。C)给出了openblas的自定义安装路径:BLAS = -L//OpenBLAS/local/lib/libopenblas.a -lpthread -L/usr/lib/gcc/x86_64-linux-gnu/4.4.7/libgfortran.so
  3. 在 srcdir 中键入 make。
4

0 回答 0