Ok guys!

You found it (again...).  We are no using mpic++ to link!!!

We are not always using the same compiler that we used to compile petsc+mpi, so we do not use mpic++ to compile (excepted for intelmpi).

For example, I compile MPI+Petsc with g++, but I am working with clang++ and may switch to g++ for my day to day work.  This is perfectly working since... long long time ago (I won't reveal my age... ;) )

I understand you choice, but your PETSC_WITH_EXTERNAL_LIB variable was helping me to painlessly find the good linking options.

I can work to manually add it when it is relevant into our compilation flags...

How did you managed to extract the libs from all the different flavors of MPI (mpich, openmpi, intelmpi) so I can now reproduce what you did before?

(maybe this should have been my question... )

Thanks again,

Eric

Le 18-02-10 à 12:37, Smith, Barry F. a écrit :
   Eric,

    We need the entire link line.

    What linker are you using C, or C++?  This is important.

    Do you have dependencies on MPI C++ symbols? In other words, are you using 
C++ MPI bindings?

     I cannot explain why all the libraries you listed would disappear from 
PETSC_WITH_EXTERNAL_LIB but we did recently make a change to manual pass under 
some circumstances less system (including MPI libraries) explicitly since they 
are already usually passed by the linker. This may be causing your difficulties.

     Eagerly awaiting your reply.

      Barry


On Feb 10, 2018, at 11:29 AM, Éric Chamberland 
<eric.chamberl...@giref.ulaval.ca> wrote:

Hi Matthew,

Yes, I heard that the MPI C++ API has been deprecated.

Yes, the mpi_cxx is now missing.  Our link line is formed mainly with 
PETSC_WITH_EXTERNAL_LIB variable that is now:

PETSC_WITH_EXTERNAL_LIB = -L/opt/petsc-master_debug/lib 
-Wl,-rpath,/opt/petsc-master_debug/lib -L/opt/petsc-master_debug/lib 
-L/opt/intel/composer_xe_2015.2.164/mkl/lib/intel64 
-Wl,-rpath,/opt/intel/composer_xe_2015.2.164/mkl/lib/intel64 
-Wl,-rpath,/opt/openmpi-1.10.2/lib -L/opt/openmpi-1.10.2/lib 
-Wl,-rpath,/usr/lib/gcc/x86_64-redhat-linux/4.8.5 
-L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 
-Wl,-rpath,/opt/intel/composer_xe_2015.2.164/compiler/lib/intel64 
-L/opt/intel/composer_xe_2015.2.164/compiler/lib/intel64 
-Wl,-rpath,/opt/intel/composer_xe_2015.2.164/ipp/lib/intel64 
-L/opt/intel/composer_xe_2015.2.164/ipp/lib/intel64 
-Wl,-rpath,/opt/intel/composer_xe_2015.2.164/tbb/lib/intel64/gcc4.4 
-L/opt/intel/composer_xe_2015.2.164/tbb/lib/intel64/gcc4.4 -lpetsc -lsuperlu 
-lsuperlu_dist -lHYPRE -lcmumps -ldmumps -lsmumps -lzmumps -lmumps_common 
-lpord -lmkl_scalapack_lp64 -lmkl_blacs_openmpi_lp64 -lml -lumfpack -lklu 
-lcholmod -lbtf -lccolamd -lcolamd -lcamd -lamd -lsuitesparseconfig 
-lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lmkl_blacs_intelmpi_lp64 
-liomp5 -ldl -lpthread -lparmetis -lmetis -lptesmumps -lptscotch -lptscotcherr 
-lesmumps -lscotch -lscotcherr -lm -lX11 -lstdc++ -ldl -lmpi_usempi -lmpi_mpifh 
-lmpi -lgfortran -lm -lgfortran -lm -lgcc_s -lquadmath -lpthread -lrt -lm 
-lpthread -lz -lstdc++ -ldl
We add some stuff to this (our own compiled libs), but nothing related to MPI 
or PETSc since we used to rely on PETSC_WITH_EXTERNAL_LIB for all our 
diffrement environments (think about different petsc version, MPI libs and 
compilers: clang, icc, g++) and it used to work until yesterday changes...

As you can see in the diff, this "block" of libraries have been removed from 
PETSC_WITH_EXTERNAL_LIB: (the -- is part of the diff output):
--ldl
--lmpi_cxx
--lmpi
--lstdc++
--lm
--lgcc_s
--lpthread

and into this block there was the "-lmpi_cxx" that we need...

I could send you our whole line of link, but the error is into this small 
change introduced yesterday into master...

Thanks a lot!

Eric

Le 18-02-10 à 10:34, Matthew Knepley a écrit :
On Sat, Feb 10, 2018 at 9:42 AM, Éric Chamberland 
<eric.chamberl...@giref.ulaval.ca> wrote:
Hi,

we used to link our c++ code with PETSc using PETSC_WITH_EXTERNAL_LIB variable 
defined in $PETSC_DIR/lib/petsc/conf/petscvariables and everything was fine 
until this night.

It seems some libs have vanished from this variable, see the diff here:

  -lptscotcherr
  -lesmumps
  -lscotch
  -lscotcherr
  -lm
  -lX11
+-lstdc++
  -ldl
  -lmpi_usempi
  -lmpi_mpifh
  -lmpi
  -lgfortran
  -lm
  -lgfortran
  -lm
  -lgcc_s
  -lquadmath
  -lpthread
--ldl
--lmpi_cxx
--lmpi
--lstdc++
--lm
--lgcc_s
--lpthread
  -lrt
  -lm
  -lpthread
  -lz
+-lstdc++
  -ldl


causing these errors at link phase for us:


  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Op::Init(void (*)(void const*, void*, int, MPI::Datatype 
const&), bool)':

/opt/openmpi-1.10.2/include/
openmpi/ompi/mpi/cxx/op_inln.
h:122: undefined reference to `ompi_mpi_cxx_op_intercept'

  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Intracomm::Create_graph(int, int const*, int const*, bool) 
const':

/opt/openmpi-1.10.2/include/
openmpi/ompi/mpi/cxx/
intracomm.h:25: undefined reference to `MPI::Comm::Comm()'

  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Intercomm::Merge(bool) const':

/opt/openmpi-1.10.2/include/
openmpi/ompi/mpi/cxx/
intracomm_inln.h:23: undefined reference to `MPI::Comm::Comm()'

  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Intracomm::Split(int, int) const':

/opt/openmpi-1.10.2/include/
openmpi/ompi/mpi/cxx/
intracomm_inln.h:23: undefined reference to `MPI::Comm::Comm()'

  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Intracomm::Create(MPI::Group const&) const':

/opt/openmpi-1.10.2/include/
openmpi/ompi/mpi/cxx/
intracomm_inln.h:23: undefined reference to `MPI::Comm::Comm()'

  
/pmi/cmpbib/compilation_BIB_gcc_redhat_petsc-master_debug/COMPILE_AUTO/GIREF/obj/dev/StatistiqueMemoire.o:
 In function `MPI::Intracomm::Clone() const':
Hi Eric,

These symbols are all coming from -lmpi_cxx. I would note that I believe the 
MPI Forum has deprecated the C++ interface, so it will
eventually go away. However, lets fix this. In the configure log, I see that 
mpicxx -show has that library in it, so it seems that the link
is not being done with the C++ compiler. Can you send the whole link line?

   Thanks,

      Matt
Is this a normal and definitive change or an unwanted/unobserved bug?

Thanks,

Eric

ps: here are the logs:

this night:

---------

http://www.giref.ulaval.ca/~cmpgiref/petsc-master-debug/2018.02.10.02h00m01s_configure.log
http://www.giref.ulaval.ca/~cmpgiref/petsc-master-debug/2018.02.10.02h00m01s_make.log



a day before:
------------


http://www.giref.ulaval.ca/~cmpgiref/petsc-master-debug/2018.02.09.02h00m02s_configure.log
http://www.giref.ulaval.ca/~cmpgiref/petsc-master-debug/2018.02.09.02h00m02s_make.log







--
What most experimenters take for granted before they begin their experiments is 
infinitely more interesting than any results to which their experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/


Reply via email to