"Smith, Barry F." <[email protected]> writes: > I think it is just CXX. The PCC business is the thing that magically > changes from CC to CXX depending on --with-clanguage being set. But CXX is > always the C++ linker.
That would make me happy, but in that case, let's get rid of PCC_LINKER, SL_LINKER, DYNAMICLINKER, and LD_SHARED because they're all redundant. > Barry > > >> On Dec 31, 2017, at 6:18 PM, Jed Brown <[email protected]> wrote: >> >> "Smith, Barry F." <[email protected]> writes: >> >>> There is always a C++ linker available so long as PETSc was built without >>> --with-cxx=0 so just use it, why make a big deal out of it? >> >> What is it called? I would like to just use CXX, but we have PCC_LINKER >> written out independently. I don't know any circumstance in which >> PCC_LINKER is different from PCC, but maybe there is. We should get rid >> of this duplication unless there is a specific circumstance in which >> they are different. >> >> $ grep mpicxx ompi/lib/petsc/conf/petscvariables >> >> >> CXX = /home/jed/usr/ccache/ompi/bin/mpicxx >> >> >> CXXCPP = /home/jed/usr/ccache/ompi/bin/mpicxx -E >> >> $ grep mpicc ompi/lib/petsc/conf/petscvariables >> >> >> SL_LINKER = /home/jed/usr/ccache/ompi/bin/mpicc >> >> >> PCC = /home/jed/usr/ccache/ompi/bin/mpicc >> PCC_LINKER = /home/jed/usr/ccache/ompi/bin/mpicc >> CC = /home/jed/usr/ccache/ompi/bin/mpicc >> DYNAMICLINKER = /home/jed/usr/ccache/ompi/bin/mpicc >> CPP = /home/jed/usr/ccache/ompi/bin/mpicc -E >> LD_SHARED = /home/jed/usr/ccache/ompi/bin/mpicc >> >> >>> Barry >>> >>>> On Dec 31, 2017, at 5:58 PM, Jed Brown <[email protected]> wrote: >>>> >>>> "Smith, Barry F." <[email protected]> writes: >>>> >>>>>> On Dec 31, 2017, at 2:14 PM, Jed Brown <[email protected]> wrote: >>>>>> >>>>>> Matthew Knepley <[email protected]> writes: >>>>>> >>>>>>> On Sun, Dec 31, 2017 at 2:35 PM, Jed Brown <[email protected]> wrote: >>>>>>> >>>>>>>> Matthew Knepley <[email protected]> writes: >>>>>>>> >>>>>>>>> On Sun, Dec 31, 2017 at 1:55 PM, Jed Brown <[email protected]> wrote: >>>>>>>>> >>>>>>>>>> These look like linker errors and that build uses >>>>>>>>>> --with-cxxlib-autodetect=0. We either need a rule to *link* C++ >>>>>>>>>> using >>>>>>>>>> CXX (i.e., mpicxx) or add LIBS=-lstdc++. >>>>>>>>>> >>>>>>>>> >>>>>>>>> I thought we were doing this (linking C++ mains with CXX). >>>>>>>> >>>>>>>> After compiling to the object file (ex3.o) we don't know what language >>>>>>>> main was written in, and this doesn't solve the actual problem that C++ >>>>>>>> linking is required if any object (not just main) depends on C++. >>>>>>>> >>>>>>> >>>>>>> My thinking here was the following: >>>>>>> >>>>>>> 1) No C++ is allowed in PETSc, unless --with-clanguage=cxx, in which >>>>>>> case >>>>>>> the linker is C++ >>>>>>> 2) If C++ is in an external library, then that configure requires the >>>>>>> C++ >>>>>>> library >>>>>>> 3) The executable itself could be C++, in which case I proposed using >>>>>>> the >>>>>>> C++ linker explicitly >>>>>>> >>>>>>> About not knowing which objects come with C++ main: I thought we did. >>>>>>> Don't >>>>>>> they go into a separate set? >>>>>> >>>>>> Right, we do have that information for tests. Note that a single test >>>>>> executable can depend on multiple source files, and the one containing >>>>>> main might not be C++ while another is. I don't know if there are any >>>>>> such instances in PETSc. >>>>>> >>>>>> I can change the build rules for tests with C++ sources later today. >>>>> >>>>> Jed, are you indicating that you will resolve the original problem I >>>>> reported? Where will you resolve it? The problem may come up in one of my >>>>> branches. >>>> >>>> I was going to put it in a new branch from 'master'. There is >>>> disgusting duplication in 'maint' that has since been fixed so I'd >>>> rather not do it there. >>>> >>>> Under what conditions is PCC_LINKER different from CC (or CXX when >>>> clanguage=C++)? I need to find a C++ linker and would prefer to use >>>> $(CXX) rather than adding a new configure test. I feel like the >>>> generated petscvariables has an inordinate amount of duplication all >>>> with non-standard names and no documentation. >>>> >>>> The cheap way to fix your issue is to add LIBS=-lstdc++ to your >>>> configure.
