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

Matt Bockman mdbockma at ucsd.edu
Wed Jul 27 19:34:28 CDT 2011


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> 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>> 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<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
>>             > >>>>>>
>>             > >>>>>>
>>             > >>>>>
>>             > >>>>
>>             > >>>
>>             > >>
>>             > >
>>             >
>>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110727/b6d9886b/attachment.htm>


More information about the petsc-users mailing list