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

Berend van Wachem b.van-wachem at imperial.ac.uk
Wed Jul 27 19:39:05 CDT 2011


Dear Matt,

Does it say this during the compiling? Or linking?

If it says this during the compiling, it means that eclipse cannot find 
the PETSc header files. So, it must be the setting of the "Includes". 
You might want to "hard-code" the directory, just to make sure.

It is indeed not completely straightforward - eclipse has so many 
options. But trust me - many of them you will really learn to appreciate 
over time.

Kind regards,

Berend.


On 07/28/2011 01:34 AM, Matt Bockman wrote:
> Thanks Berend for your thorough response,
>
> I have done what you have said but I still get the same error regarding
> "undefined references to PetscInitialize" etc. It's like I didn't
> include the petscksp.h file, but it's there. I even tried petsc.h to no
> avail.
>
> I'm not sure what the compiler is referring to when it says "Undefined
> references to ...". What I think this is is in the assembly code
> generated by the compiler, there is a PetscInitialize symbol that isn't
> found in the library. But I'm soooooooooo confused at this point :(. How
> did you guys all learn how to compile this?
>
> Matt
>
> On Wed, Jul 27, 2011 at 4:46 PM, Berend van Wachem
> <b.van-wachem at imperial.ac.uk <mailto:b.van-wachem at imperial.ac.uk>> wrote:
>
>     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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto: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>
>         <mailto:trl%7Bpetsc-dev at mcs.__anl.gov
>         <mailto:trl%257Bpetsc-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