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

Berend van Wachem b.van-wachem at imperial.ac.uk
Wed Jul 27 20:11:58 CDT 2011


Dear Matt,

What do you have under
Properties->C/C++ Build -> Settings -> GCC Linker Libraries for both 
"Libraries" and "Library Search Path"?

Regards,
Berend.


On 07/28/2011 02:04 AM, Matt Bockman wrote:
> Hi Berend,
>
> Under Properties->C/C++ Build -> Settings -> GCC C Compiler ->
> Directories : Include paths (-I) I have:
>
> /home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/include
> /home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8/linux-gnu-c-debug/include
>
> Under Properties -> C/C++ BUild -> Environment -> I have
>
> PETSC_ARCH = linux-gnu-c-debug
> PETSC_DIR = /home/mdbockman/Documents/Research/codes/petsc/petsc-3.1-p8
>
> In my source file I have included petsc.h:
>
> #include "petsc.h"
>
> Thanks,
> Matt
>
> On Wed, Jul 27, 2011 at 5:54 PM, Berend van Wachem
> <b.van-wachem at imperial.ac.uk <mailto:b.van-wachem at imperial.ac.uk>> wrote:
>
>     Dear Matt,
>
>     The error is definitely in the compiler stage: it cannot find that
>     appropriate petsc.h include file.
>     1. Have you included petsc.h in the source file?
>     2. What do you have under
>     <Your Project> -> Settings -> Includes
>     ?
>
>     Also, just to make sure, you can set the appropriate values for
>     PETSC_DIR and PETSC_ARCH if you wish under
>     <Your Project> -> Settings -> Environment
>
>     Regards,
>
>     Berend.
>
>
>
>     On 07/28/2011 01:49 AM, Matt Bockman wrote:
>
>         Hi Berend,
>
>         Here is the complete output of the build:
>
>         http//pastebin.com/Es4ms4EF <http://pastebin.com/Es4ms4EF>
>
>         and by the 2nd to last line "collect2: ld returned 1 exit status" I
>         believe it is failing during the linking step. I'm not 100% sure
>         though.
>
>         Thanks for your quick response and help. Please advise,
>
>         Matt
>
>         On Wed, Jul 27, 2011 at 5:39 PM, Berend van Wachem
>         <b.van-wachem at imperial.ac.uk
>         <mailto:b.van-wachem at imperial.ac.uk>
>         <mailto:b.van-wachem at imperial.__ac.uk
>         <mailto:b.van-wachem at imperial.ac.uk>>> wrote:
>
>         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>
>         <mailto:b.van-wachem at imperial.__ac.uk
>         <mailto:b.van-wachem at imperial.ac.uk>>
>         <mailto:b.van-wachem at imperial.
>         <mailto:b.van-wachem at imperial.>____ac.uk <http://ac.uk>
>         <mailto: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>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>
>         <mailto: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>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>
>         <mailto: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>>
>         <mailto:balay at mcs.anl.gov <mailto:balay at mcs.anl.gov>
>         <mailto:balay at mcs.anl.gov <mailto:balay at mcs.anl.gov>>>
>         <mailto:balay at mcs.anl.gov <mailto:balay at mcs.anl.gov>
>         <mailto:balay at mcs.anl.gov <mailto:balay at mcs.anl.gov>>
>         <mailto: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>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>
>         <mailto: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>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>
>         <mailto: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>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>
>         <mailto: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>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>
>         <mailto:mdbockma at ucsd.edu <mailto:mdbockma at ucsd.edu>>
>         <mailto: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>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>
>         <mailto:mirzadeh at gmail.com <mailto:mirzadeh at gmail.com>>
>         <mailto: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>>
>         <mailto:bsmith at mcs.anl.gov <mailto:bsmith at mcs.anl.gov>
>         <mailto:bsmith at mcs.anl.gov <mailto:bsmith at mcs.anl.gov>>>
>         <mailto:bsmith at mcs.anl.gov <mailto:bsmith at mcs.anl.gov>
>         <mailto:bsmith at mcs.anl.gov <mailto:bsmith at mcs.anl.gov>>
>         <mailto: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>>
>         <mailto:trl%7Bpetsc-dev at mcs.
>         <mailto:trl%257Bpetsc-dev at mcs.>____anl.gov <http://anl.gov>
>         <mailto:trl%257Bpetsc-dev at mcs.__anl.gov
>         <mailto:trl%25257Bpetsc-dev at mcs.anl.gov>>>
>         <mailto:trl%7Bpetsc-dev at mcs <mailto:trl%257Bpetsc-dev at mcs>.
>         <mailto:trl%257Bpetsc-dev at mcs
>         <mailto:trl%25257Bpetsc-dev at mcs>.__>____anl.gov <http://anl.gov>
>         <http://anl.gov>
>
>         <mailto:trl%257Bpetsc-dev at mcs.
>         <mailto:trl%25257Bpetsc-dev at mcs.>____anl.gov <http://anl.gov>
>         <mailto:trl%25257Bpetsc-dev at __mcs.anl.gov
>         <mailto:trl%2525257Bpetsc-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