2016-10-11 12 views
0

私は成功なしでHPLを構築しようとしてきました。私はOpen MPIをインストールしており、正しく動作しています。私はBLASライブラリも持っています。 しかし私がビルドしようとすると、openmpiに関連するエラーが発生すると思います。たとえば、「opal_install_dirs」はlibopen-palのシンボルです。しかし、私はこれらの未定義の参照がどこから来たのかわからないので、私はそれを修正するために何をすべきかわかりません。HPLのエラーを構築する

fcoll_dynamic_file_write_all.c:(.text+0x20f0): undefined reference to `opal_output' 
fcoll_dynamic_file_write_all.c:(.text+0x2122): undefined reference to `opal_output' 
/usr/local/lib/libmpi.a(fcoll_dynamic_file_write_all.o):fcoll_dynamic_file_write_all.c:(.text+0x216e): more undefined references to `opal_output' follow 
/usr/local/lib/libmpi.a(pinfo_create.o): In function `PMPI_Info_create': 
pinfo_create.c:(.text+0x94): undefined reference to `opal_class_initialize' 
/usr/local/lib/libmpi.a(ppack_external.o): In function `PMPI_Pack_external': 
ppack_external.c:(.text+0xae): undefined reference to `opal_convertor_t_class' 
ppack_external.c:(.text+0x129): undefined reference to `opal_convertor_prepare_for_send' 
ppack_external.c:(.text+0x1ed): undefined reference to `opal_convertor_pack' 
ppack_external.c:(.text+0x23c): undefined reference to `opal_class_initialize' 
/usr/local/lib/libmpi.a(ppack_external_size.o): In function `PMPI_Pack_external_size': 
ppack_external_size.c:(.text+0x7d): undefined reference to `opal_convertor_t_class' 
ppack_external_size.c:(.text+0xf4): undefined reference to `opal_convertor_prepare_for_recv' 
ppack_external_size.c:(.text+0x15c): undefined reference to `opal_class_initialize' 
/usr/local/lib/libmpi.a(punpack_external.o): In function `PMPI_Unpack_external': 
punpack_external.c:(.text+0xa2): undefined reference to `opal_convertor_t_class' 
punpack_external.c:(.text+0x114): undefined reference to `opal_convertor_prepare_for_recv' 
punpack_external.c:(.text+0x1d8): undefined reference to `opal_convertor_unpack' 
punpack_external.c:(.text+0x22c): undefined reference to `opal_class_initialize' 
/usr/local/lib/libmpi.a(pstatus_set_elements_x.o): In function `PMPI_Status_set_elements_x': 
pstatus_set_elements_x.c:(.text+0xb2): undefined reference to `opal_datatype_set_element_count' 
/usr/local/lib/libmpi.a(libdebuggers_la-ompi_debuggers.o): In function `check': 
/home/snc/workspace/openmpi-2.0.1/ompi/debuggers/ompi_debuggers.c:146: undefined reference to `opal_argv_append_nosize' 
/usr/local/lib/libmpi.a(libdebuggers_la-ompi_debuggers.o): In function `ompi_debugger_setup_dlls': 
/home/snc/workspace/openmpi-2.0.1/ompi/debuggers/ompi_debuggers.c:171: undefined reference to `opal_install_dirs' 
/home/snc/workspace/openmpi-2.0.1/ompi/debuggers/ompi_debuggers.c:172: undefined reference to `mca_base_var_register' 
/home/snc/workspace/openmpi-2.0.1/ompi/debuggers/ompi_debuggers.c:181: undefined reference to `opal_argv_split' 
/home/snc/workspace/openmpi-2.0.1/ompi/debuggers/ompi_debuggers.c:186: undefined reference to `opal_argv_free' 
/usr/local/lib/libmpi.a(osc_rdma_frag.o):(.data.rel+0x8): undefined reference to `opal_free_list_item_t_class' 
/usr/local/lib/libmpi.a(vprotocol_pessimist_event.o):(.data.rel+0x8): undefined reference to `opal_list_item_t_class' 
collect2: error: ld returned 1 exit status 
Makefile:76: recipe for target 'dexe.grd' failed 
make[2]: *** [dexe.grd] Error 1 
make[2]: Leaving directory '/home/mpiuser/cloud/hpl/testing/ptest/Linux_Intel64' 
Make.top:64: recipe for target 'build_tst' failed 
make[1]: *** [build_tst] Error 2 
make[1]: Leaving directory '/home/mpiuser/cloud/hpl' 
Makefile:72: recipe for target 'build' failed 
make: *** [build] Error 2 

これはmakeの出力の最後の部分です。 「私は、私はいくつかの記事やフォーラム上の情報から、そこにさまざまなオプションを試してみました

MPdir  = /usr/local 
MPinc  = $(MPdir)/include 
MPlib  = $(MPdir)/lib/libmpi.a 
... 
LAdir  = /usr/lib/libblas 
ifndef LAinc 
LAinc  = 
endif 
ifndef LAlib 
LAlib  = $libblas.a 
endif 
... 
# ---------------------------------------------------------------------- 
# - Compilers/linkers - Optimization flags --------------------------- 
# ---------------------------------------------------------------------- 
# 
CC  = mpicc 
CCNOOPT = $(HPL_DEFS) 

CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops -fopenmp 
# 
# On some platforms, it is necessary to use the Fortran linker to find 
# the Fortran internals used in the BLAS library. 
# 
LINKER  = $(CC) 
LINKFLAGS = $(CCFLAGS) 
# 
ARCHIVER  = ar 
ARFLAGS  = r 
RANLIB  = echo 

、と私は他のいくつかの以前のエラーを乗り越え、私はすることができます:HPLのための設定ファイルで

私が持っていますこれを修正するために何かを見つける。誰かが何が間違っているのか見える?ありがとう。

+0

を空にMPincとMPLIBを設定することで、問題を解決するには、自動的に基本的なコンパイラに含まれ、ライブラリパス。明示的に 'MPinc'と' MPlib'を設定するのは災害のレシピです! –

+0

私もそれを試みたが、私はまだ問題があった。私はそれまで見たすべてのサンプル設定でなぜそれが設定されていますか? –

+0

すべてのMPI実装がそのようなコンパイララッパーを提供するわけではないので、ライブラリを通常のコンパイラとリンカーを使用して明示的にリンクする必要があります。 Open MPI、Intel MPI、MPICH、MVAPICH、その他多数の最新のライブラリでは、 'MPinc'と' MPlib'の両方を空文字列に設定する必要があります。 –

答えて

0

私は単にlibmpi.aの代わりにlibmpi.soを使用して問題を解決しましたが、違いは何か分かりません。前に見た設定の例のほとんどは、libmpi.soを使用したものを除いて、* .aライブラリを使用していました。

+0

'mpicc'はすべての必要なライブラリをコンパイラとリンカに渡します。あなた自身のために 'mpicc --showme'を見てください。 Open MPIは複数のコンポーネント(OpenRTE、OPAL、MPIインターフェイスなど)に分割され、デフォルトですべて動的にリンクされます。 'libmpi.a'は静的MPIインターフェースです。それは他のコンポーネントの静的バージョンに依存し、それらはあなたのケースでは提供されないため、未解決の外部シンボルエラー(動的シンボルと静的シンボルは混在できません)。適切な解決策は、 'MPinc'と' MPlib'を空の文字列に設定し、 'mpicc'が残りを処理するようにすることです。 –

0

私は `mpicc`コンパイラのラッパーが正しいMPIを渡します文字列

+0

詳細な説明はこれをより有益な答えにするでしょう。 –

関連する問題