link with other libraries

Satish Balay balay at mcs.anl.gov
Fri Jul 21 13:53:34 CDT 2006


You should be using:

main:  main.o myclass.o chkopts
   -${CLINKER} -o main main.o myclass.o  ${MY_LIB} ${PETSC_KSP_LIB}
    ${RM} main.o myclass.o

Or better:


MY_INC          = -I/my/include
MY_LIB          = -L/my/lib -lmy
MY_OBJ          =  main.o myclass1.o myclass3.o myclass3.o

CFLAGS           =
FFLAGS           =
CPPFLAGS         = ${MY_INC}
FPPFLAGS         =
CLEANFILES       = main

include ${PETSC_DIR}/bmake/common/base

main:  ${MY_OBJ}  chkopts
   -${CLINKER} -o main ${MY_OBJ} ${MY_LIB} ${PETSC_KSP_LIB}
    ${RM} ${MY_OBJ}

Satish

On Fri, 21 Jul 2006, jordi poblet wrote:

> Satish,
> 
> Thank you very much for your fast response. It has solved the problem with
> including files and I can generate the object file for my class (myclass.o).
> However, I suppose that with
> 
> ex1: myclass.o chkopts
> 
>  -${CLINKER} -o ex1 myclass.o  ${MY_LIB} ${PETSC_KSP_LIB}
>   ${RM} myclass.o
> the makefile is trying to link a self executable program (ex1) and I
> obtain the following error message:
> 
> : undefined reference to `main'
> (in myclass.cpp there is no main block, the class is used by main.cpp).
> 
> I would like,
> 
> 1-compile the class and obtain the file myclass.o (now I can do it with the
> error shown above, but the file is at least generated) taking into account
> the correct includes (from PETSc and from other libraries). I do not need
> the libraries in this step
> 2-compile all the other classes not using PETSc and obtain the other files
> *.o
> 3-link all the files *.o and myclass.o taking into account all the libraries
> 
> 
> Thank you very much. Best regards,
> 
> 
> Jordi Poblet
> 
> 
> On 7/21/06, Satish Balay <balay at mcs.anl.gov> wrote:
> > 
> > The basic form of a PETSc makefile is as follows:
> > 
> > >>>>>>
> > CFLAGS           =
> > FFLAGS           =
> > CPPFLAGS         =
> > FPPFLAGS         =
> > CLEANFILES       =
> > 
> > include ${PETSC_DIR}/bmake/common/base
> > 
> > ex1: ex1.o  chkopts
> >         -${CLINKER} -o ex1 ex1.o  ${PETSC_KSP_LIB}
> >         ${RM} ex1.o
> > >>>>>>>>>>
> > 
> > 
> > If you wish to specify additonal libraries - you can do it as:
> > 
> > 
> > >>>>>>>
> > MY_INC          = -I/my/include
> > MY_LIB          = -L/my/lib -lmy
> > 
> > CFLAGS           =
> > FFLAGS           =
> > CPPFLAGS         = ${MY_INC}
> > FPPFLAGS         =
> > CLEANFILES       =
> > 
> > include ${PETSC_DIR}/bmake/common/base
> > 
> > ex1: ex1.o  chkopts
> >         -${CLINKER} -o ex1 ex1.o  ${MY_LIB} ${PETSC_KSP_LIB}
> >         ${RM} ex1.o
> > >>>>>>>>>
> > 
> > Also - you should make sure this library is compiled with the same
> > compilers as PETSc is compiled with.
> > 
> > Satish
> > 
> > On Fri, 21 Jul 2006, jordi poblet wrote:
> > 
> > > Dear all,
> > >
> > > I would like to use PETSc within a finite element program (the main part
> > is
> > > written in C++). Some classes should use PETSc routines and routines
> > from
> > > other libraries. When compiling these classes, I have to include not
> > only
> > > the header files from PETSc (which in the examples of a single C or C++
> > > files are included automatically with the sample makefiles provided in
> > the
> > > manual) but also header files from the other used libraries. Finally, I
> > > would have also to link PETSc with other libraries at the same time.
> > > I have tried to construct a makefile including 'by hand' the PETSc
> > headers
> > > but I have always problems. Could someone help me? Have you got makefile
> > > examples for this situation (or similar)?
> > >
> > > The compilation options for the PETSc library that I have employed are:
> > >
> > > ./config/configure.py --with-mpi=0 --with-clanguage=c++
> > > --with-scalar-type=complex
> > >
> > > tests and examples are passed correctly.
> > >
> > > I am running PETSc in linux machines.
> > >
> > >
> > > Thank you in advance,
> > >
> > > Jordi Poblet
> > >
> > 
> > 
> 




More information about the petsc-users mailing list