[petsc-users] Linking error with C++ code: undefined symbols

charles reid charlesreid1 at gmail.com
Wed Mar 24 03:02:54 CDT 2010


Hi Satish -

Thanks for your response. I think this helped me to realize that I was
making things harder than they should be.

I've managed to get this working, and here are a few notes:

1. It was not clear to me why the Petsc-provided makefiles worked, because
the compilation of the C code into a ".o" file is buried deep inside several
makefiles (e.g. $PETSC_DIR/conf/rules) included in the original example
makefile.  So, I was trying to compile each of my ".cc" files into ".o"
files manually, then link.  In fact, all I had to do was let Petsc take care
of compiling each ".cc" file into a ".o" file, and I only had to give the
line to link the libraries to the driver.

2. The only major change I had to make to the example makefiles to get the
driver to link and compile was to add ${PETSC_CC_INCLUDES} after ${CLINKER},
like this:

Laplace: Laplace.cc $(OBJ_FILES)
    -${CLINKER} ${PETSC_CC_INCLUDES} Laplace.cc -o bin.x $(OBJ_FILES)
${PETSC_KSP_LIB}
    ${RM} $(OBJ_FILES)

Otherwise there were some error messages related to header files.


Thanks again for your help.

Charles

2010/3/23 Satish Balay <balay at mcs.anl.gov>

> For one we recommend using the latest version i.e petsc-3.0.0 [or the
> upcoming petsc-3.1 - via petsc-dev] - but not this old version 2.3.3.
>
> Secondly - if you want to use PETSc from c++ - the recommended way is
> to build it with the configure option '--with-clanguage=cxx'
>
> And then [after making sure the examples work] use "petsc.h" without
> the "extern C" etc. in your code.
>
> If the examples compile fine - - but not your code - the issuse is
> usually the makefile [make it as close to a petsc makefile as possible
> - for eg: src/ksp/ksp/examples/tutorials/makefile].
>
> Satish
>
> On Tue, 23 Mar 2010, charles reid wrote:
>
> > (Please let me know if I can give any additional information that would
> be
> > helpful for this problem.)
> >
> >
> > I'm trying to use Petsc in an object-oriented C++ code, developing with
> g++
> > on Mac OS X 10.5, and I'm running into some problems in the linking
> stage.
> > I've defined an object that uses Petsc (what I'm calling the GmresSolver
> > class), and the object compiles just fine.  However, when it comes time
> to
> > compile the driver (Laplace.cc) and link to Petsc libraries, I see a
> bunch
> > of "Undefined symbol" errors.
> >
> > In my object code that uses Petsc (GmresSolver.h), I have included the
> Petsc
> > header file as:
> > extern "C" {
> > #include "petscksp.h"
> > }
> >
> > In the driver (Laplace.cc), depending on how I include the Petsc header
> > file, I get different errors.  If I include it like I do in
> GmresSolver.h,
> > extern "C" {
> > #include "petsc.h"
> > }
> >
> > I get a whole slew of header file syntax errors (see postscript of
> email).
> > If I just include the header file,
> > #include "petsc.h"
> >
> > then I get the undefined symbols problem (more below).
> >
> >
> > My configure line for Petsc is
> > Users/charles/pkg/petsc-2.3.3-p15/config/configure.py \
> >    --prefix=$HOME/pkg/petsc-2.3.3-p15 \
> >    --with-python \
> >    --with-mpi=0 \
> >    --with-debugging=1 \
> >    PETSC_DIR=$HOME/pkg/petsc-2.3.3-p15
> >
> >
> >
> > Here's my step-by-step to produce the error:
> >
> > 1. Compile all non-Petsc object code
> >
> > 2. Compile object code that uses Petsc using this command:
> >
> > g++ -c -Wall  -I.  -I/Users/charles/pkg/petsc-2.3.3-p15
> > -I/Users/charles/pkg/petsc-2.3.3-p15/bmake/darwin9.5.0-c-opt
> > -I/Users/charles/pkg/petsc-2.3.3-p15/include ./GmresSolver.
> >
> > (as mentioned, this works fine.)
> >
> > 3. Compile the driver, "Laplace.cc", and link it to Petsc's libraries:
> >
> > g++  \
> >  -I/Users/charles/pkg/petsc-2.3.3-p15/  \
> >  -I/Users/charles/pkg/petsc-2.3.3-p15/include  \
> >  -I/Users/charles/pkg/petsc-2.3.3-p15/include/mpiuni  \
> >  -I/Users/charles/pkg/petsc-2.3.3-p15/include/petsc \
> >  -DPETSC_STATIC_INLINE=""  \
> >  Laplace.cc  \
> >  -L/Users/charles/pkg/petsc-2.3.3-p15 \
> >  -L/Users/charles/pkg/petsc-2.3.3-p15/lib/darwin9.5.0-c-opt \
> >  -lpetscts -lpetscsnes -lpetscksp -lpetscdm -lpetscmat -lpetscvec -lpetsc
> \
> >  BoundaryConditionFactory.o  BoundaryCondition.o Field.o FileIO.o
> > GmresSolver.o JacobiSolver.o Timer.o TimerFactory.o
> >
> > (Note: I don't know why I need -DPETSC_STATIC_INLINE="", but I do,
> otherwise
> > I see a bunch of errors like "petsc-2.3.3-p15/include/petscviewer.h:117:
> > error: ‘PETSC_STATIC_INLINE’ does not name a type" - anyone know what
> that's
> > all about?)
> >
> > This last compiler command gives the undefined symbols errors:
> >
> > Undefined symbols:
> >   "PetscOptionsGetReal(char const*, char const*, double*, PetscTruth*)",
> > referenced from:
> >       PetscOptionsGetReal(char const*, double*, PetscTruth*)in ccPG7mg3.o
> >   "_Petsc_MPI_Abort", referenced from:
> >       _PetscMaxSum_Local in libpetsc.a(pinit.o)
> >       _PetscADMax_Local in libpetsc.a(pinit.o)
> >       _PetscADMin_Local in libpetsc.a(pinit.o)
> >       _PetscSynchronizedFlush in libpetsc.a(mprint.o)
> >       _PetscSynchronizedFlush in libpetsc.a(mprint.o)
> >       _PetscOptionsCheckInitial_Private in libpetsc.a(init.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscError in libpetsc.a(err.o)
> >       _PetscMallocDumpLog in libpetsc.a(mtr.o)
> >       _PetscSequentialPhaseBegin_Private in libpetsc.a(mpiu.o)
> >       _PetscSequentialPhaseEnd_Private in libpetsc.a(mpiu.o)
> >       _PetscSignalHandler_Private in libpetsc.a(signal.o)
> >       _PetscSignalHandler_Private in libpetsc.a(signal.o)
> >       _PetscDefaultSignalHandler in libpetsc.a(signal.o)
> >       _PetscMPIAbortErrorHandler in libpetsc.a(errstop.o)
> >       _PetscDefaultFPTrap in libpetsc.a(fp.o)
> >   "_Petsc_MPI_Comm_dup", referenced from:
> >       _PetscFinalize in libpetsc.a(pinit.o)
> >       _PetscSequentialPhaseBegin in libpetsc.a(mpiu.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >   "_Petsc_MPI_Init", referenced from:
> >       _PetscInitialize in libpetsc.a(pinit.o)
> >   "PetscOptionsGetTruth(char const*, char const*, PetscTruth*,
> > PetscTruth*)", referenced from:
> >       PetscOptionsGetTruth(char const*, PetscTruth*, PetscTruth*)in
> > ccPG7mg3.o
> >   "PetscInitialize(int*, char***, char const*, char const*)", referenced
> > from:
> >       PetscInitialize(int*, char***)in ccPG7mg3.o
> >       _main in ccPG7mg3.o
> >   "_MPIUNI_TMP", referenced from:
> >       _MPIUNI_TMP$non_lazy_ptr in ccPG7mg3.o
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(pinit.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(mprint.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(init.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(options.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(plog.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(mpinit.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(err.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(mtr.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(mpiu.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(verboseinfo.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(adebug.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(binv.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(filev.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(eventLog.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(view.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(pdisplay.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(tagm.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(mpiuopen.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(draw.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(sysio.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(pbarrier.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(dupl.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(fretrieve.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(send.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(dscatter.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(petscvu.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(axis.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(random.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(drawv.o)
> >       _MPIUNI_TMP$non_lazy_ptr in libpetsc.a(lg.o)
> >   "PetscOptionsGetScalar(char const*, char const*, double*,
> PetscTruth*)",
> > referenced from:
> >       PetscOptionsGetScalar(char const*, double*, PetscTruth*)in
> ccPG7mg3.o
> >   "_Petsc_MPI_Keyval_create", referenced from:
> >       _PetscViewerASCIIGetStdout in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIGetStderr in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIOpen in libpetsc.a(vcreatea.o)
> >       _PetscSequentialPhaseBegin in libpetsc.a(mpiu.o)
> >       _PETSC_VIEWER_BINARY_ in libpetsc.a(binv.o)
> >       _PetscViewerDestroy_ASCII in libpetsc.a(filev.o)
> >       _PetscCommGetNewTag in libpetsc.a(tagm.o)
> >       _PetscCommGetNewTag in libpetsc.a(tagm.o)
> >       _PetscCommGetNewTag in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscSharedTmp in libpetsc.a(fretrieve.o)
> >       _PetscSharedWorkingDirectory in libpetsc.a(fretrieve.o)
> >       _PETSC_VIEWER_SOCKET_ in libpetsc.a(send.o)
> >       _PETSC_VIEWER_DRAW_ in libpetsc.a(drawv.o)
> >   "_Petsc_MPI_Attr_delete", referenced from:
> >       _PetscSequentialPhaseEnd in libpetsc.a(mpiu.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >   "_Petsc_MPI_Attr_get", referenced from:
> >       _PetscViewerASCIIGetStdout in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIGetStderr in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIOpen in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIOpen in libpetsc.a(vcreatea.o)
> >       _PetscSequentialPhaseEnd in libpetsc.a(mpiu.o)
> >       _PETSC_VIEWER_BINARY_ in libpetsc.a(binv.o)
> >       _PetscViewerDestroy_ASCII in libpetsc.a(filev.o)
> >       _PetscCommGetNewTag in libpetsc.a(tagm.o)
> >       _PetscCommGetNewTag in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >       _PetscSharedTmp in libpetsc.a(fretrieve.o)
> >       _PetscSharedWorkingDirectory in libpetsc.a(fretrieve.o)
> >       _PETSC_VIEWER_SOCKET_ in libpetsc.a(send.o)
> >       _PETSC_VIEWER_DRAW_ in libpetsc.a(drawv.o)
> >   "_Petsc_MPI_Attr_put", referenced from:
> >       _PetscViewerASCIIGetStdout in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIGetStderr in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIOpen in libpetsc.a(vcreatea.o)
> >       _PetscViewerASCIIOpen in libpetsc.a(vcreatea.o)
> >       _PetscSequentialPhaseBegin in libpetsc.a(mpiu.o)
> >       _PETSC_VIEWER_BINARY_ in libpetsc.a(binv.o)
> >       _PetscViewerDestroy_ASCII in libpetsc.a(filev.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscCommDuplicate in libpetsc.a(tagm.o)
> >       _PetscSharedTmp in libpetsc.a(fretrieve.o)
> >       _PetscSharedWorkingDirectory in libpetsc.a(fretrieve.o)
> >       _PETSC_VIEWER_SOCKET_ in libpetsc.a(send.o)
> >       _PETSC_VIEWER_DRAW_ in libpetsc.a(drawv.o)
> >   "PetscOptionsGetString(char const*, char const*, char*, unsigned long,
> > PetscTruth*)", referenced from:
> >       PetscOptionsGetString(char const*, char*, unsigned long,
> > PetscTruth*)in ccPG7mg3.o
> >   "_Petsc_MPI_Finalize", referenced from:
> >       _PetscFinalize in libpetsc.a(pinit.o)
> >       _Petsc_MPI_DebuggerOnError in libpetsc.a(init.o)
> >       _PetscAttachDebuggerErrorHandler in libpetsc.a(adebug.o)
> >   "PetscOptionsGetRealArray(char const*, char const*, double*, int*,
> > PetscTruth*)", referenced from:
> >       PetscOptionsGetRealArray(char const*, double*, int*, PetscTruth*)in
> > ccPG7mg3.o
> >   "PetscOptionsGetInt(char const*, char const*, int*, PetscTruth*)",
> > referenced from:
> >       PetscOptionsGetInt(char const*, int*, PetscTruth*)in ccPG7mg3.o
> >   "PetscViewerCreate(int, _p_PetscViewer**)", referenced from:
> >       PetscViewerCreate(_p_PetscViewer**)      in ccPG7mg3.o
> >   "_Petsc_MPI_Comm_free", referenced from:
> >       _PetscFinalize in libpetsc.a(pinit.o)
> >       _PetscSequentialPhaseEnd in libpetsc.a(mpiu.o)
> >       _PetscCommDestroy in libpetsc.a(tagm.o)
> >   "PetscFinalize()", referenced from:
> >       _main in ccPG7mg3.o
> >   "PetscOptionsHasName(char const*, char const*, PetscTruth*)",
> referenced
> > from:
> >       PetscOptionsHasName(char const*, PetscTruth*)in ccPG7mg3.o
> >   "PetscOptionsGetStringArray(char const*, char const*, char**, int*,
> > PetscTruth*)", referenced from:
> >       PetscOptionsGetStringArray(char const*, char**, int*,
> PetscTruth*)in
> > ccPG7mg3.o
> >   "_MPIUNI_Memcpy", referenced from:
> >       _PetscMaxSum in libpetsc.a(pinit.o)
> >       _PetscFinalize in libpetsc.a(pinit.o)
> >       _PetscGlobalMax in libpetsc.a(pinit.o)
> >       _PetscGlobalMin in libpetsc.a(pinit.o)
> >       _PetscGlobalSum in libpetsc.a(pinit.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintSummary in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscLogPrintDetailed in libpetsc.a(plog.o)
> >       _PetscIntView in libpetsc.a(err.o)
> >       _PetscIntView in libpetsc.a(err.o)
> >       _PetscIntView in libpetsc.a(err.o)
> >       _PetscIntView in libpetsc.a(err.o)
> >       _PetscRealView in libpetsc.a(err.o)
> >       _PetscRealView in libpetsc.a(err.o)
> >       _PetscRealView in libpetsc.a(err.o)
> >       _PetscRealView in libpetsc.a(err.o)
> >       _PetscScalarView in libpetsc.a(err.o)
> >       _PetscScalarView in libpetsc.a(err.o)
> >       _PetscScalarView in libpetsc.a(err.o)
> >       _PetscScalarView in libpetsc.a(err.o)
> >       _PetscSharedTmp in libpetsc.a(fretrieve.o)
> >       _PetscSharedWorkingDirectory in libpetsc.a(fretrieve.o)
> >   "_Petsc_MPI_Initialized", referenced from:
> >       _PetscInitialize in libpetsc.a(pinit.o)
> >   "PetscOptionsGetIntArray(char const*, char const*, int*, int*,
> > PetscTruth*)", referenced from:
> >       PetscOptionsGetIntArray(char const*, int*, int*, PetscTruth*)in
> > ccPG7mg3.o
> >   "PetscSequentialPhaseBegin(int, int)", referenced from:
> >       PetscSequentialPhaseBegin(int)  in ccPG7mg3.o
> >       PetscSequentialPhaseBegin()     in ccPG7mg3.o
> >   "PetscSequentialPhaseEnd(int, int)", referenced from:
> >       PetscSequentialPhaseEnd(int)  in ccPG7mg3.o
> >       PetscSequentialPhaseEnd()     in ccPG7mg3.o
> > ld: symbol(s) not found
> > collect2: ld returned 1 exit status
> >
> > Is this a problem with my libpetsc.a?  Or is this problem because another
> > library is broken or not being linked to?  Any insight into this problem
> > would be greatly appreciated.  After several hours of trying to figure
> this
> > out I feel like I'm lost at sea.
> >
> >
> > Charles
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Postscript:
> >
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h: In function
> > ‘PetscErrorCode PetscViewerCreate(_p_PetscViewer**)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h:117: error:
> > declaration of C function ‘PetscErrorCode
> > PetscViewerCreate(_p_PetscViewer**)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h:116: error:
> > previous declaration ‘PetscErrorCode PetscViewerCreate(MPI_Comm,
> > _p_PetscViewer**)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h: In function
> > ‘PetscErrorCode PetscViewerCreate(_p_PetscViewer**)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h:117: error:
> invalid
> > conversion from ‘int’ to ‘_p_PetscViewer**’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h:117: error: too
> > many arguments to function ‘PetscErrorCode
> > PetscViewerCreate(_p_PetscViewer**)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscviewer.h:117: error: at
> this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsHasName(const char*, PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:10: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsHasName(const
> char*,
> > PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:9: error:
> previous
> > declaration ‘PetscErrorCode PetscOptionsHasName(const char*, const char*,
> > PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsHasName(const char*, PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:10: error:
> cannot
> > convert ‘const char*’ to ‘PetscTruth*’ for argument ‘2’ to
> ‘PetscErrorCode
> > PetscOptionsHasName(const char*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetInt(const char*, PetscInt*, PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:12: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetInt(const char*,
> > PetscInt*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:11: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetInt(const char*,
> const
> > char*, PetscInt*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetInt(const char*, PetscInt*, PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:12: error:
> cannot
> > convert ‘const char*’ to ‘PetscInt*’ for argument ‘2’ to ‘PetscErrorCode
> > PetscOptionsGetInt(const char*, PetscInt*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetTruth(const char*, PetscTruth*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:14: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetTruth(const
> char*,
> > PetscTruth*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:13: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetTruth(const char*,
> const
> > char*, PetscTruth*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetTruth(const char*, PetscTruth*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:14: error:
> cannot
> > convert ‘const char*’ to ‘PetscTruth*’ for argument ‘2’ to
> ‘PetscErrorCode
> > PetscOptionsGetTruth(const char*, PetscTruth*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetReal(const char*, PetscReal*,
> PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:16: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetReal(const
> char*,
> > PetscReal*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:15: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetReal(const char*,
> const
> > char*, PetscReal*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetReal(const char*, PetscReal*,
> PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:16: error:
> cannot
> > convert ‘const char*’ to ‘PetscReal*’ for argument ‘2’ to ‘PetscErrorCode
> > PetscOptionsGetReal(const char*, PetscReal*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetScalar(const char*, PetscScalar*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:18: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetScalar(const
> char*,
> > PetscScalar*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:17: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetScalar(const char*,
> > const char*, PetscScalar*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetScalar(const char*, PetscScalar*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:18: error:
> cannot
> > convert ‘const char*’ to ‘PetscScalar*’ for argument ‘2’ to
> ‘PetscErrorCode
> > PetscOptionsGetScalar(const char*, PetscScalar*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetIntArray(const char*, PetscInt*,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:20: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetIntArray(const
> > char*, PetscInt*, PetscInt*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:19: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetIntArray(const char*,
> > const char*, PetscInt*, PetscInt*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetIntArray(const char*, PetscInt*,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:20: error:
> cannot
> > convert ‘const char*’ to ‘PetscInt*’ for argument ‘2’ to ‘PetscErrorCode
> > PetscOptionsGetIntArray(const char*, PetscInt*, PetscInt*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetRealArray(const char*, PetscReal*,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:22: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetRealArray(const
> > char*, PetscReal*, PetscInt*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:21: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetRealArray(const
> char*,
> > const char*, PetscReal*, PetscInt*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetRealArray(const char*, PetscReal*,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:22: error:
> cannot
> > convert ‘const char*’ to ‘PetscReal*’ for argument ‘2’ to ‘PetscErrorCode
> > PetscOptionsGetRealArray(const char*, PetscReal*, PetscInt*,
> PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetString(const char*, char*, size_t,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error:
> > declaration of C function ‘PetscErrorCode PetscOptionsGetString(const
> char*,
> > char*, size_t, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:23: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetString(const char*,
> > const char*, char*, size_t, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetString(const char*, char*, size_t,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error:
> invalid
> > conversion from ‘const char*’ to ‘char*’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error:
> invalid
> > conversion from ‘char*’ to ‘size_t’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error:
> invalid
> > conversion from ‘size_t’ to ‘PetscTruth*’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error: too
> > many arguments to function ‘PetscErrorCode PetscOptionsGetString(const
> > char*, char*, size_t, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:24: error: at
> this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetStringArray(const char*, char**,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:26: error:
> > declaration of C function ‘PetscErrorCode
> PetscOptionsGetStringArray(const
> > char*, char**, PetscInt*, PetscTruth*)’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:25: error:
> > previous declaration ‘PetscErrorCode PetscOptionsGetStringArray(const
> char*,
> > const char*, char**, PetscInt*, PetscTruth*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h: In function
> > ‘PetscErrorCode PetscOptionsGetStringArray(const char*, char**,
> PetscInt*,
> > PetscTruth*)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petscoptions.h:26: error:
> cannot
> > convert ‘const char*’ to ‘char**’ for argument ‘2’ to ‘PetscErrorCode
> > PetscOptionsGetStringArray(const char*, char**, PetscInt*, PetscTruth*)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscInitialize(int*, char***)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1160: error:
> declaration
> > of C function ‘PetscErrorCode PetscInitialize(int*, char***)’ conflicts
> with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1159: error: previous
> > declaration ‘PetscErrorCode PetscInitialize(int*, char***, const char*,
> > const char*)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscInitialize(int*, char***)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1160: error: too many
> > arguments to function ‘PetscErrorCode PetscInitialize(int*, char***)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1160: error: at this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1347: error:
> declaration
> > of C function ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’
> conflicts
> > with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1346: error: previous
> > declaration ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm,
> > PetscMPIInt)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1347: error: too many
> > arguments to function ‘PetscErrorCode
> PetscSequentialPhaseBegin(MPI_Comm)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1347: error: at this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseBegin()’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1348: error:
> declaration
> > of C function ‘PetscErrorCode PetscSequentialPhaseBegin()’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1347: error: previous
> > declaration ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1348: error: too many
> > arguments to function ‘PetscErrorCode PetscSequentialPhaseBegin()’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1348: error: at this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseBegin(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1350: error:
> declaration
> > of C function ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm)’
> conflicts
> > with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1349: error: previous
> > declaration ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm,
> PetscMPIInt)’
> > here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1350: error: too many
> > arguments to function ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm)’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1350: error: at this
> > point in file
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseEnd()’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1351: error:
> declaration
> > of C function ‘PetscErrorCode PetscSequentialPhaseEnd()’ conflicts with
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1350: error: previous
> > declaration ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm)’ here
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h: In function
> > ‘PetscErrorCode PetscSequentialPhaseEnd(MPI_Comm)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1351: error: too many
> > arguments to function ‘PetscErrorCode PetscSequentialPhaseEnd()’
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1351: error: at this
> > point in file
> > Laplace.cc: In function ‘int main(int, char**)’:
> > /Users/charles/pkg/petsc-2.3.3-p15/include/petsc.h:1160: error: too many
> > arguments to function ‘PetscErrorCode PetscInitialize(int*, char***)’
> > Laplace.cc:206: error: at this point in file
> >
> >
> > This last error doesn't even make sense, as it conforms to the usage
> > specified here (
> >
> http://www.mcs.anl.gov/petsc/petsc-2/snapshots/petsc-dev/docs/manualpages/Sys/PetscInitialize.html
> > ).
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20100324/0b86dc86/attachment-0001.htm>


More information about the petsc-users mailing list