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

Matt Bockman mdbockma at ucsd.edu
Wed Jul 27 20:04:49 CDT 2011


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> 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<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<b.van-wachem at imperial.ac.uk>
>> >
>>        <mailto:b.van-wachem at imperial.**__ac.uk
>>        <mailto:b.van-wachem at imperial.**ac.uk<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>>>> 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>>>> 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>>>> 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>>>>**
>> ____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>>>> 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>>>>**
>> ____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>>>> 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>>>
>>
>>
>>         > >>>> > 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>>>>**
>> ____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>
>> >
>>        <mailto:trl%7Bpetsc-dev at mcs.__**anl.gov <http://anl.gov>
>>        <mailto:trl%257Bpetsc-dev at mcs.**anl.gov<trl%25257Bpetsc-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@**mcs.anl.gov<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
>>         > >>>>>>
>>         > >>>>>>
>>         > >>>>>
>>         > >>>>
>>         > >>>
>>         > >>
>>         > >
>>         >
>>
>>
>>
>>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20110727/b879bb74/attachment-0001.htm>


More information about the petsc-users mailing list