Error Building NCO 4.6.1 with macOS PGI 16.10

All…well, okay, jtull…poor jtull :),

More questions with building libraries with macOS PGI. I’ve managed to get most working, but NCO (and ESMF) are the two stragglers. NCO does okay (save for some weird library manipulations I seem to need to do) and it gets near the end where it links and then:

/bin/sh ../../libtool --tag=CXX  --tag=CC   --mode=link mpicc  -g -mp  -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib -lnetcdf -ljpeg -lmfhdf -ldf -lhdf5_hl -lhdf5 -ldl -lm -lmfhdf -ldf -lsz -ljpeg -lcurl -lssl -lcrypto -lssl -lcrypto -lz -lm -ldl -lm -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin//lib   -o ncwa ncwa.o ncap_utl.o ncap_lex.o ncap_yacc.o libnco.la -ludunits2 -lexpat -lresolv -lm -lnetcdf -lnetcdf -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libhdf5_hl.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libhdf5.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libz.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libsz.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libcurl.a -lmfhdf -ldf -lsz  -ljpeg  -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib -lcurl -lssl -lcrypto -lssl -lcrypto -lz -lm	 -ldl -lm -ludunits2
libtool: link: mpicc -g -mp -o ncwa ncwa.o ncap_utl.o ncap_lex.o ncap_yacc.o  -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib -L/Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin//lib ./.libs/libnco.a -L/Users/mathomp4/macports/lib -lresolv /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libnetcdf.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libhdf5_hl.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libhdf5.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libz.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libudunits2.a -lexpat /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libmfhdf.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libdf.a /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libsz.a -ljpeg /Users/mathomp4/installed/MPI/pgi-16.10/mpich-3.2/Baselibs/5.0.2/Darwin/lib/libcurl.a -lssl -lcrypto -lz -ldl -lm -mp
duplicate symbol _nco_upk_cnv in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_rth_cnv in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_mrd_cnv in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_baa_cnv in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol ___pgi_prtcnt in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_fmt_xtn_set in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_upk_cnv_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_rth_cnv_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_mrd_cnv_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_baa_cnv_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_fmt_xtn_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_prg_nm_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_dbg_lvl_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_not_mss_val_sng_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_mss_val_sng_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_prg_id_get in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _ncap_ncl_dpt_crr in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_fmt_xtn in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _main in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_dbg_lvl in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_not_mss_val_sng in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
duplicate symbol _nco_mss_val_sng in:
    ncwa.o
    ./.libs/libnco.a(ncap.o)
ld: 22 duplicate symbols for inferred architecture x86_64
make[4]: *** [ncwa] Error 2
make[3]: *** [install-recursive] Error 1
make[2]: *** [install-recursive] Error 1
make[1]: *** [nco.install] Error 2
make: *** [install] Error 2

Now the “library maniplations” I mention are:

nco.install: nco.config
        @echo "Installing nco with hack for Darwin"
        @(cd nco; \
          export NETCDF_ROOT="$(prefix)/"; \
          export NETCDF_LIB="$(prefix)/lib"; \
          export NETCDF_INC="$(prefix)/include/netcdf"; \
          export PATH="$(prefix)/bin:$(PATH)" ;\
          export CPPFLAGS="$(CPPFLAGS) $(INC_SUPP) -I$(prefix)/include/netcdf";\
          export LIBS="-L$(prefix)/lib $(LIB_HDF5) -lmfhdf -ldf -lsz  -ljpeg $(LINK_GPFS) $(LIB_CURL) -ldl -lm" ;\
          sed -i '' '/^SUBDIRS/s/doc//' Makefile ;\
          $(MAKE) install ;\
          cd src/nco ;\
          ar r libnco.a *.o ;\
          mv libnco.a .libs/ ;\
          cd ../.. ;\
          $(MAKE) install )
        @touch $@

For some reason, on Darwin, libtool or something has an issue making the .a and it works just fine for Intel and GNU so it’s compiler agnostic. I don’t think that’s the issue.

Any ideas? I’m asking this on NCO’s forums as well, but I thought I’d ask here.

ETA: Note, I am using jtull’s magic siterc, so that doesn’t fix this.

Matt

Note: a while back (PGI 14 days) I had to build NCO without OpenMP. If I try that (–disable-openmp), I get a different duplicate symbol error:

/bin/sh ../../libtool --tag=CXX  --tag=CC   --mode=link mpicc  -g  -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib -lnetcdf -ljpeg -lmfhdf -ldf -lhdf5_hl -lhdf5 -ldl -lm -lmfhdf -ldf -lsz -ljpeg -lcurl -lssl -lcrypto -lssl -lcrypto -lz -lm -ldl -lm -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin//lib   -o ncbo ncbo.o libnco.la -ludunits2 -lexpat -lresolv -lm -lnetcdf -lnetcdf -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libhdf5_hl.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libhdf5.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libz.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libsz.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libcurl.a -lmfhdf -ldf -lsz  -ljpeg  -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib -lcurl -lssl -lcrypto -lssl -lcrypto -lz -lm       -ldl -lm -ludunits2
libtool: link: mpicc -g -o ncbo ncbo.o  -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib -L/Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin//lib ./.libs/libnco.a -L/Users/mathomp4/macports/lib -lresolv /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libnetcdf.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libhdf5_hl.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libhdf5.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libz.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libudunits2.a -lexpat /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libmfhdf.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libdf.a /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libsz.a -ljpeg /Users/mathomp4/installed/MPI/pgi-16.10/openmpi-2.0.1/Baselibs/5.0.2-ESMF7snap13extra/Darwin/lib/libcurl.a -lssl -lcrypto -lz -ldl -lm
duplicate symbol _omp_in_parallel in:
    ./.libs/libnco.a(nco_omp.o)
    /opt/pgi/osx86-64/16.10/lib/libpgmp.a(omp_parallel.o)
duplicate symbol _omp_get_nested in:
    ./.libs/libnco.a(nco_omp.o)
    /opt/pgi/osx86-64/16.10/lib/libpgmp.a(omp_parallel.o)
duplicate symbol _omp_set_nested in:
    ./.libs/libnco.a(nco_omp.o)
    /opt/pgi/osx86-64/16.10/lib/libpgmp.a(omp_parallel.o)
duplicate symbol _omp_set_num_threads in:
    ./.libs/libnco.a(nco_omp.o)
    /opt/pgi/osx86-64/16.10/lib/libpgmp.a(lcpu.o)
ld: 4 duplicate symbols for inferred architecture x86_64
make[4]: *** [ncbo] Error 2
make[3]: *** [install-recursive] Error 1
make[2]: *** [install-recursive] Error 1
make[1]: *** [nco.install] Error 2
make: *** [install] Error 2

Finally, just to mention it, in a fit of pique I decided to try using GNU libtool instead of Apple libtool to see what happened. Answer: no difference. Ah well, it was a thought.