[petsc-users] PETSc, C++ and Eclipse

Berend van Wachem b.van-wachem at imperial.ac.uk
Wed Jul 27 18:46:10 CDT 2011


Dear Matt,

I use Eclipse and have eclipse make the makefiles.
It is just a matter of indicating to eclipse where the PETSc 
headers/libraries are to be found, so if you have a C project which 
needs PETSc headers and libraries:

To do this, click on your managed C project with the right sided mouse 
button, select

Properties -> C/C++ Build -> Settings

Then you get a new window with on the right hand side the various 
setting options.

Select Includes, and add the required PETSc paths. In my case I have added
${PETSC_DIR}/include
${PETSC_DIR}/${PETSC_ARCH}/include

Then select "Libraries" under the header Linker
and you should set the Library search path:
${PETSC_DIR}/${PETSC_ARCH}/lib

and then the libraries, in my case:
m, petsc, stdc++, mpichxx, mpich, lapack, blas, gfortran, dl, rt,gcc_s, 
pthread, X11
(you can find these easily in $PETSC_DIR/$PETSC_ARCH/petscmachineinfo.h)

The nice thing is that in eclipse you can easily switch between 
Debug/Release code, traverse into the PETSc source code etc. It's really 
a very productive tool with PETSc I've found.

Let me know if you have any questions.

Kind regards,

Berend.


On 07/27/2011 11:25 PM, Matt Bockman wrote:
> Thanks everyone for the help,
>
> I was able to compile a single example in Eclipse using the provided
> makefile. I'm pretty new to makefiles so it's a LOT to digest. I'm now
> manually creating a makefile for my project in Eclipse (and I've set
> Eclipse up to use a makefile that I create instead of automatically
> generating one). Unfortunately this is a big pain but since I can't
> figure out how to make Eclipse automatically include a few files in the
> makefile I don't really have any other choices :(.
>
> Thanks again,
> Matt
>
> On Wed, Jul 27, 2011 at 1:43 PM, Mohammad Mirzadeh <mirzadeh at gmail.com
> <mailto:mirzadeh at gmail.com>> wrote:
>
>     There two problems(I think) in this code.
>
>     1) there is no main function in your source code. If this is the
>     only file you are compiling, you need to change the function name to
>     main.
>     2) linking should be done after object files are created. A simple
>     g++ call would first compile the main file and then link the object
>     to the petsc lib i.e
>
>     g++ -c -I($PETSC_INCLUDE) main.cpp
>     g++ -o main main.o $PETSC_LIBS
>
>     alternatively, you could do it in a single line if you like
>
>     g++ -o main -I($PETSC_INCLUDE) main.cpp $PETSC_LIBS
>
>     my point is you should link to petsc after compiling your own code.
>     So wherever in Eclipse that you are seting the parameters, make sure
>     the $PETSC_LIBS is in the linker option and not compiler.
>
>     Mohammad
>
>
>     On Wed, Jul 27, 2011 at 12:39 PM, Matt Bockman <mdbockma at ucsd.edu
>     <mailto:mdbockma at ucsd.edu>> wrote:
>
>         I added the include directories from "make getincludedirs" and I
>         added the line from "make getlinklib". Eclipse creates a gcc
>         call as follows:
>
>         /home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/bin/mpicc
>         -I/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/include
>         -I/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/include
>         -I/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/include
>         -O0 -g3 -pg -p -Wall
>         -Wl,-rpath,/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -Wl,-rpath,/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -L/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -lpetsc -lX11
>         -Wl,-rpath,/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -L/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -lflapack -lfblas -lnsl -lrt -lm
>         -L/home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/lib
>         -L/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2
>         -L/usr/lib/x86_64-linux-gnu -ldl -lmpich -lpthread -lrt -lgcc_s
>         -lmpichf90 -lgfortran -lm -lm -ldl -lmpich -lpthread -lrt
>         -lgcc_s -ldl -MMD -MP -MF"SparseMatrixPetsc.d"
>         -MT"SparseMatrixPetsc.d" -o"SparseMatrixPetsc.o"
>         "../SparseMatrixPetsc.c
>
>         And when it is compiled I get the following:
>
>         http://pastebin.com/CbRzYcZj
>
>         The source file which is being compiled is:
>
>         http://pastebin.com/Q85hXvnS
>
>         Please have a look. I'm not quite sure what I'm doing wrong but
>         I feel like I'm getting closer and closer to the solution.
>
>         Matt
>
>
>         On Wed, Jul 27, 2011 at 11:52 AM, Satish Balay
>         <balay at mcs.anl.gov <mailto:balay at mcs.anl.gov>> wrote:
>
>             use:
>             make getincludedirs
>
>             Satish
>
>             On Wed, 27 Jul 2011, Mohammad Mirzadeh wrote:
>
>              > I applogize for the mistake; Include files are actually
>             located
>              > in $PETSC_DIR/include
>              >
>              > On Wed, Jul 27, 2011 at 11:18 AM, Mohammad Mirzadeh
>             <mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>wrote:
>              >
>              > > Ok then. Now I don't have enough experience with Eclipse so
>              > > I apologize beforehand if you already know these/have
>             tried them out. If
>              > > not, hopefully they can be of help. I assume there
>             should be a way in
>              > > Eclipse to give it the link lib directory. In plain
>             makefile that's just a
>              > > simple step when linking. To get all the needed
>             linklibs for petsc, you can
>              > > do
>              > >
>              > > make getlinklibs
>              > >
>              > > in the $PETSC_DIR. As for the needed include files,
>             they are all located
>              > > in
>              > >
>              > > $PETSC_DIR/$PETSC_ARCH/include
>              > >
>              > > Again, its easy to use these directories along with
>             your makefile. I'm not
>              > > sure about how you give them to Eclipse though.
>             Hopefully this has been
>              > > helpful.
>              > >
>              > > Best,
>              > > Mohammad
>              > >
>              > >
>              > >
>              > >
>              > > On Wed, Jul 27, 2011 at 10:52 AM, Matt Bockman
>             <mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>> wrote:
>              > >
>              > >> Just pointing it to the library would be sufficient.
>              > >>
>              > >> Matt
>              > >>
>              > >>
>              > >> On Wed, Jul 27, 2011 at 10:21 AM, Mohammad Mirzadeh
>             <mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>wrote:
>              > >>
>              > >>> So do you want to be able to compile PETSc with
>             Eclipse or just point it
>              > >>> to the library to use in your own applications?
>              > >>>
>              > >>>
>              > >>> On Wed, Jul 27, 2011 at 9:14 AM, Matt Bockman
>             <mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>> wrote:
>              > >>>
>              > >>>> Thanks Mohammad,
>              > >>>>
>              > >>>> I'll give that a shot. I use Qt Creator for some GUI
>             applications so I
>              > >>>> am familiar with it, but I've never tried doing a
>             non-Qt project in it. I'd
>              > >>>> really like to get Eclipse to work.
>              > >>>>
>              > >>>> Regarding the makefiles for eclipse. There are
>             makefiles that it
>              > >>>> generates (which are for GNU make) but I think I can
>             also manually create my
>              > >>>> makefiles. After sleeping on it, it seems like this
>             might be the best
>              > >>>> option, unless I can figure out a way to configure
>             eclipse to include the
>              > >>>> conf/variables and conf/rules files in the makefile.
>              > >>>>
>              > >>>> Matt
>              > >>>>
>              > >>>>
>              > >>>> On Wed, Jul 27, 2011 at 12:01 AM, Mohammad Mirzadeh
>             <mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>              > >>>> > wrote:
>              > >>>>
>              > >>>>> Although this is sort of orthogonal to what you do
>             right now,
>              > >>>>> I recommend Qt Creator as an alternative IDE to
>             Eclipse. It links nicely
>              > >>>>> with PETSc(or any other library for that matter)
>             and has excellent c/c++
>              > >>>>> support.
>              > >>>>>
>              > >>>>> Mohammad
>              > >>>>>
>              > >>>>>
>              > >>>>> On Tue, Jul 26, 2011 at 7:22 PM, Barry Smith
>             <bsmith at mcs.anl.gov <mailto:bsmith at mcs.anl.gov>>wrote:
>              > >>>>>
>              > >>>>>>
>              > >>>>>> There is a tiny bit of information in the PETSc
>             users manual about
>              > >>>>>> Eclipse:
>              > >>>>>>
>              > >>>>>> \section{Eclipse Users} \sindex{eclipse}
>              > >>>>>>
>              > >>>>>> If you are interested in developing code that uses
>             PETSc from Eclipse
>              > >>>>>> or developing PETSc in Eclipse and have knowledge
>             of how to do indexing and
>              > >>>>>> build libraries in Eclipse please contact us at \
>              > >>>>>> trl{petsc-dev at mcs.anl.gov
>             <mailto:trl%7Bpetsc-dev at mcs.anl.gov>}.
>              > >>>>>>
>              > >>>>>> To make PETSc an Eclipse package
>              > >>>>>> \begin{itemize}
>              > >>>>>> \item Install the Mecurial plugin for Eclipse and
>             then import the
>              > >>>>>> PETSc repository to Eclipse.
>              > >>>>>> \item elected New->Convert to C/C++ project and
>             selected shared
>              > >>>>>> library. After this point you can perform searchs
>             in the code.
>              > >>>>>> \end{itemize}
>              > >>>>>>
>              > >>>>>> A PETSc user has provided the following steps to
>             build an Eclipse
>              > >>>>>> index for PETSc that can be used with their own
>             code without compiling PETSc
>              > >>>>>> source into their project.
>              > >>>>>> \begin{itemize}
>              > >>>>>> \item In the user project source directory, create
>             a symlink to the
>              > >>>>>> petsc/src directory.
>              > >>>>>> \item Refresh the project explorer in Eclipse, so
>             the new symlink is
>              > >>>>>> followed.
>              > >>>>>> \item Right-click on the project in the project
>             explorer, and choose
>              > >>>>>> "Index -> Rebuild". The index should now be build.
>              > >>>>>> \item Right-click on the PETSc symlink in the
>             project explorer, and
>              > >>>>>> choose "Exclude from build..." to make sure
>             Eclipse does not try to compile
>              > >>>>>> PETSc with the project.
>              > >>>>>> \end{itemize}
>              > >>>>>>
>              > >>>>>> We'd love to have someone figure out how to do it
>             right and include
>              > >>>>>> that information.
>              > >>>>>>
>              > >>>>>> Barry
>              > >>>>>>
>              > >>>>>> On Jul 26, 2011, at 4:32 PM, Matt Bockman wrote:
>              > >>>>>>
>              > >>>>>> > Has anyone gotten PETSc to work w/Eclipse?
>             Eclipse nicely generates
>              > >>>>>> all my makefiles for me for my current project
>             (which is written in C++).
>              > >>>>>> I'd like to link PETSc w/my application but I'm
>             not sure how to do this.
>              > >>>>>> >
>              > >>>>>> > Suggestions?
>              > >>>>>> >
>              > >>>>>> > Thanks,
>              > >>>>>> > Matt
>              > >>>>>>
>              > >>>>>>
>              > >>>>>
>              > >>>>
>              > >>>
>              > >>
>              > >
>              >
>
>
>
>


More information about the petsc-users mailing list