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): `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 の絶対位置を指定しました。また、シンボル dtrsv_ が libopenblas.a で定義されているかどうかを確認するために gcc-nm も実行し、シンボルがライブラリで定義されていることを示す次の出力を得ました。

    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 を使用して自分のシステムで解凍してコンパイルしました/。
  3. コンパイルが完了したら、make install と入力して、ホーム フォルダーのカスタム ディレクトリにインストールします。

スイートパースの場合:

  1. http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.4.4.tar.gz から suitesparse をダウンロード
  2. それを解凍し、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
  3. srcdir に make と入力します。
4

0 に答える 0