Matt,

did you build the same Open MPI 4.1.1 from an official tarball with the
previous NAG Fortran?
did you run autogen.pl (--force) ?

Just to be sure, can you rerun the same test with the previous NAG version?


When using static libraries, you can try manually linking with
-lopen-orted-mpir and see if it helps.
If you want to use shared libraries, I would try to run configure,
and then edit the generated libtool file:
look a line like

CC="nagfor"

and then edit the next line


# Commands used to build a shared archive.

archive_cmds="\$CC -dynamiclib \$allow_undef ..."

simply manually remove "-dynamiclib" here and see if it helps


Cheers,

Gilles
On Fri, Oct 29, 2021 at 12:30 AM Matt Thompson via users <
users@lists.open-mpi.org> wrote:

> Dear Open MPI Gurus,
>
> This is a...confusing one. For some reason, I cannot build a working Open
> MPI with NAG 7.0.7062 and clang on my MacBook running macOS 11.6.1. The
> thing is, I could do this back in July with NAG 7.0.7048. So my fear is
> that something changed with macOS, or clang/xcode, or something in between.
>
> So here are the symptoms, I usually build with a few extra flags that I've
> always carried around but for now I'm going to go basic. First, I try to
> build Open MPI in a basic way:
>
> ../configure FCFLAGS"=-mismatch_all -fpp" CC=clang CXX=clang++ FC=nagfor
> --prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-basic |& tee
> configure.log
>
> Note that the FCFLAGS are needed for NAG since it doesn't preprocess .F90
> files by default (so -fpp) and it can be *very* strict with interfaces and
> any slight interface difference is an error so we use -mismatch_all.
>
> Now with this configure line, I then build and:
>
> Making all in mpi/fortran/use-mpi-tkr
> make[2]: Entering directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
>   FCLD     libmpi_usempi.la
> NAG Fortran Compiler Release 7.0(Yurakucho) Build 7062
> Option error: Unrecognised option -dynamiclib
> make[2]: *** [Makefile:1966: libmpi_usempi.la] Error 2
> make[2]: Leaving directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi/mpi/fortran/use-mpi-tkr'
> make[1]: *** [Makefile:3555: all-recursive] Error 1
> make[1]: Leaving directory
> '/Users/mathomp4/src/MPI/openmpi-4.1.1/build-basic/ompi'
> make: *** [Makefile:1901: all-recursive] Error 1
>
> For some reason, the make system is trying to pass a clang option,
> -dynamiclib, to nagfor and it fails. With verbose on:
>
> libtool: link: nagfor -dynamiclib -Wl,-Wl,,-undefined
> -Wl,-Wl,,dynamic_lookup -o .libs/libmpi_usempi.40.dylib  .libs/mpi.o
> .libs/mpi_aint_add_f90.o .libs/mpi_aint_diff_f90.o
> .libs/mpi_comm_spawn_multiple_f90.o .libs/mpi_testall_f90.o
> .libs/mpi_testsome_f90.o .libs/mpi_waitall_f90.o .libs/mpi_waitsome_f90.o
> .libs/mpi_wtick_f90.o .libs/mpi_wtime_f90.o .libs/mpi-tkr-sizeof.o...
>
> As a test, I tried the same thing with NAG 7.0.7048 (which worked in July)
> and I get the same issue:
>
> Option error: Unrecognised option -dynamiclib
>
> Note, that Intel Fortran and Gfortran *do* support this flag, but NAG has
> something like:
>
>        -Bbinding Specify  static  or  dynamic binding.  This only has
> effect if specified during the link phase.  The default is dynamic binding.
>
> but maybe the Open MPI system doesn't know NAG?
>
> So I say to myself, okay, dynamiclib is a shared library sounding thing,
> so let's try static library build! So, following the documentation I try:
>
> ../configure --enable-static -disable-shared FCFLAGS"=-mismatch_all -fpp"
> CC=gcc CXX=g++ FC=nagfor
> --prefix=$HOME/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static |& tee
> configure.log
>
> and it builds! Yay! And then I try to build helloworld.c and it fails! To
> wit:
> ❯ cat helloworld.c
> /*The Parallel Hello World Program*/
> #include <stdio.h>
> #include <mpi.h>
>
> int main(int argc, char **argv)
> {
>    int node;
>
>    MPI_Init(&argc,&argv);
>    MPI_Comm_rank(MPI_COMM_WORLD, &node);
>
>    printf("Hello World from Node %d\n",node);
>
>    MPI_Finalize();
> }
> ❯
> /Users/mathomp4/installed/Compiler/nag-7.0_7062/openmpi/4.1.1-static/bin/mpicc
> helloworld.c
> Undefined symbols for architecture x86_64:
>   "_MPIR_Breakpoint", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_attach_fifo", referenced from:
>       _orte_submit_finalize in libopen-rte.a(orted_submit.o)
>       _orte_submit_job in libopen-rte.a(orted_submit.o)
>       _open_fifo in libopen-rte.a(orted_submit.o)
>   "_MPIR_being_debugged", referenced from:
>       _ompi_rte_wait_for_debugger in libmpi.a(rte_orte_module.o)
>       _orte_submit_job in libopen-rte.a(orted_submit.o)
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>       _attach_debugger in libopen-rte.a(orted_submit.o)
>   "_MPIR_debug_state", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_executable_path", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>       _setup_debugger_job in libopen-rte.a(orted_submit.o)
>       _run_debugger in libopen-rte.a(orted_submit.o)
>       _attach_debugger in libopen-rte.a(orted_submit.o)
>   "_MPIR_forward_output", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>       _setup_debugger_job in libopen-rte.a(orted_submit.o)
>   "_MPIR_i_am_starter", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_partial_attach_ok", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_proctable", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_proctable_size", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>   "_MPIR_server_arguments", referenced from:
>       _orte_debugger_init_after_spawn in libopen-rte.a(orted_submit.o)
>       _setup_debugger_job in libopen-rte.a(orted_submit.o)
>       _run_debugger in libopen-rte.a(orted_submit.o)
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
>
> So...yeah. ¯\_(ツ)_/¯ Maybe this needs -Bstatic??
>
> But again, all this worked with shared a few months ago (I've never tried
> static until now) and NAG has *never* supported -dynamiclib as far as I
> know.
>
> I do see references to -Bstatic and -Bdynamic in the source code, but
> apparently I'm not triggering the configure step to use them?
>
> Anyone else out there encounter this?
>
> NOTE: I did try doing an Intel Fortran + Clang shared build today and that
> seemed to work. I think that's because Intel Fortran recognizes -dynamiclib
> so it can get past that FCLD step.
> --
> Matt Thompson
>    “The fact is, this is about us identifying what we do best and
>    finding more ways of doing less of it better” -- Director of Better
> Anna Rampton
>

Reply via email to