在Linux上使用Openblas编译Suiteparse 4.4.4

时间:2015-04-06 22:55:49

标签: c++ linux gcc openblas umfpack

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


    ../Lib/libumfpack.a(umf_di_local_search.o): In function  `umfdi_local_search':
    umf_local_search.c:(.text+0x4c0): undefined reference to `dtrsv_'
    umf_local_search.c:(.text+0x634): undefined reference to `dgemv_'
    ../Lib/libumfpack.a(umf_di_blas3_update.o): In function    `umfdi_blas3_update':
    umf_blas3_update.c:(.text+0x11d): undefined reference to `dtrsm_'
    umf_blas3_update.c:(.text+0x1de): undefined reference to `dgemm_'
    umf_blas3_update.c:(.text+0x2ae): undefined reference to `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. 从。下载openblas     http://github.com/xianyi/OpenBLAS/zipball/v0.2.14。
  2. 使用gcc-4.4.7和以下命令在我的系统上解压缩并编译它 make FC = / usr / bin / lgfortran-4.4 我必须提供'FC',因为我的系统没有libgfortran。*目前在/ usr / lib /.
  3. 编译完成后,我输入     make install 安装到我的主文件夹中的自定义目录。
  4. 对于suitesparse:

    1. 从http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.4.tar.gz
    2. 下载suitesparse
    3. 解压缩,并编辑了suitparse_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 < / LI>
    4. 在srcdir中输入make。

0 个答案:

没有答案