[petsc-users] PETSc, C++ and Eclipse
Berend van Wachem
b.van-wachem at imperial.ac.uk
Wed Jul 27 19:54:09 CDT 2011
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
>
> 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>> 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>>> 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>
> <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>>>}.
>
>
> > >>>>>>
> > >>>>>> 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