2016-10-11 7 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 

이것은 출력 결과의 끝 부분에 불과합니다. '내가 몇 게시물 및 포럼에있는 정보에서, 거기에 다른 옵션을 시도

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

자세한 설명은이 정보를 좀 더 유용한 답으로 만들 것입니다. –