On Mon, Jan 14, 2019 at 07:38:34AM +0100, Andreas Kusalananda Kähäri wrote: > On Sun, Jan 13, 2019 at 04:37:23PM +0100, Thomas L. wrote: > > Hi, > > > > I tried compiling a MPI example program > > (https://raw.githubusercontent.com/wesleykendall/mpitutorial/gh-pages/tutorials/mpi-hello-world/code/mpi_hello_world.c) > > with openmpi on -current and it fails linking: > > $ mpicc -v Downloads/mpi_hello_world.c > > OpenBSD clang version 6.0.0 (tags/RELEASE_600/final) (based on LLVM 6.0.0) > > Target: amd64-unknown-openbsd6.4 > > Thread model: posix > > InstalledDir: /usr/bin > > "/usr/bin/cc" -cc1 -triple amd64-unknown-openbsd6.4 -emit-obj -mrelax-all > > -disable-free -disable-llvm-verifier -discard-value-names -main-file-name > > mpi_hello_world.c -mrelocation-model pic -pic-level 1 -pic-is-pie > > -mthread-model posix -mdisable-fp-elim -relaxed-aliasing -masm-verbose > > -mconstructor-aliases -munwind-tables -target-cpu x86-64 -dwarf-column-info > > -debugger-tuning=gdb -v -resource-dir /usr/lib/clang/6.0.0 -I > > /usr/local/include -fdebug-compilation-dir /home/tom -ferror-limit 19 > > -fmessage-length 224 -femulated-tls -fwrapv -pthread -stack-protector 2 > > -D_RET_PROTECTOR -ret-protector -fobjc-runtime=gnustep > > -fdiagnostics-show-option -fno-builtin-malloc -fno-builtin-calloc > > -fno-builtin-realloc -fno-builtin-valloc -fno-builtin-free > > -fno-builtin-strdup -fno-builtin-strndup -o /tmp/mpi_hello_world-a9e376.o > > -x c Downloads/mpi_hello_world.c > > clang -cc1 version 6.0.0 based upon LLVM 6.0.0 default target > > amd64-unknown-openbsd6.4 > > #include "..." search starts here: > > #include <...> search starts here: > > /usr/local/include > > /usr/lib/clang/6.0.0/include > > /usr/include > > End of search list. > > "/usr/bin/ld" -e __start --eh-frame-hdr -Bdynamic -dynamic-linker > > /usr/libexec/ld.so -o a.out /usr/bin/../lib/crt0.o > > /usr/bin/../lib/crtbegin.o -L/usr/local/lib -L/usr/bin/../lib -L/usr/lib > > /tmp/mpi_hello_world-a9e376.o -lmpi -lopen-rte -lopen-pal -E -lutil -lm > > -lcompiler_rt -lpthread -lc -lcompiler_rt /usr/bin/../lib/crtend.o > > /usr/bin/ld: error: undefined symbol: MPI_Init > > >>> referenced by mpi_hello_world.c > > >>> /tmp/mpi_hello_world-a9e376.o:(main) > > > > /usr/bin/ld: error: undefined symbol: MPI_Comm_size > > >>> referenced by mpi_hello_world.c > > >>> /tmp/mpi_hello_world-a9e376.o:(main) > > > > /usr/bin/ld: error: undefined symbol: MPI_Comm_rank > > >>> referenced by mpi_hello_world.c > > >>> /tmp/mpi_hello_world-a9e376.o:(main) > > > > /usr/bin/ld: error: undefined symbol: MPI_Get_processor_name > > >>> referenced by mpi_hello_world.c > > >>> /tmp/mpi_hello_world-a9e376.o:(main) > > > > /usr/bin/ld: error: undefined symbol: MPI_Finalize > > >>> referenced by mpi_hello_world.c > > >>> /tmp/mpi_hello_world-a9e376.o:(main) > > cc: error: linker command failed with exit code 1 (use -v to see invocation) > > > > The reason seems to be, that the relevant symbols in libmpi.so.0.1 are > > local: > > $ nm /usr/local/lib/libmpi.so.0.1 | grep MPI_Init > > 00070330 t MPI_Init > > 000704f0 t MPI_Init_thread > > 000706b0 t MPI_Initialized > > 00070330 T PMPI_Init > > 000704f0 T PMPI_Init_thread > > 000706b0 T PMPI_Initialized > > > > Unfortunately, I have no idea why this happens. > > > > Kind regards, > > > > Thomas > > Yes, I also noticed this in June last year [1]. Only the profiling > version of each API function is non-local. Unfortunately, I was in a > hurry to get something working so I simply moved my development and > testing to another operating system rather than digging into why this > was so. I might try to look into this later if time permits. > > [1] https://marc.info/?l=openbsd-ports&m=152929789302360&w=2 > > > Regards, > > -- > Andreas Kusalananda Kähäri, > National Bioinformatics Infrastructure Sweden (NBIS), > Uppsala University, Sweden.
Ok, so it seems OpenMPI has to be configured with --disable-visibility. This would make the symbols show up as "W" ("weak") instead of as local. A simple test program compiles. A patch for the devel/openmpi port is attached, although the port we have is marked as "ancient" on the OpenMPI web pages [1], and the latest release is 4.0.0. [1] https://www.open-mpi.org/ Regards, -- Andreas Kusalananda Kähäri, National Bioinformatics Infrastructure Sweden (NBIS), Uppsala University, Sweden.
Index: Makefile =================================================================== RCS file: /extra/cvs/ports/devel/openmpi/Makefile,v retrieving revision 1.25 diff -u -p -r1.25 Makefile --- Makefile 24 Oct 2018 14:28:00 -0000 1.25 +++ Makefile 14 Jan 2019 08:35:11 -0000 @@ -7,7 +7,7 @@ COMMENT = open source MPI-2 implementat V= 1.4.1 DISTNAME = openmpi-$V -REVISION = 7 +REVISION = 8 SHARED_LIBS = mca_common_sm 1.0 \ mpi 0.1 \ @@ -39,6 +39,7 @@ USE_LIBTOOL = No FAKE_FLAGS = sysconfdir=${PREFIX}/share/examples/openmpi/ CONFIGURE_STYLE = gnu CONFIGURE_ENV = F77=${MODFORTRAN_COMPILER} +CONFIGURE_ARGS = --disable-visibility # openmpi's otfinfo conflicts with the one from texlive post-install: