dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #09217
Re: Issues when compiling DOLFIN without MPI
On Wed, Aug 20, 2008 at 12:35 PM, Anders Logg <logg@xxxxxxxxx> wrote:
> On Wed, Aug 20, 2008 at 12:02:57PM -0500, Matthew Knepley wrote:
>> On Wed, Aug 20, 2008 at 11:54 AM, Marie Rognes <meg@xxxxxxxxxxx> wrote:
>> > Jed Brown wrote:
>> >> On Wed 2008-08-20 17:35, Marie Rognes wrote:
>> >>
>> >>> Matthew Knepley wrote:
>> >>>
>> >>>> On Wed, Aug 20, 2008 at 5:08 AM, Garth N. Wells <gnw20@xxxxxxxxx> wrote:
>> >>>>
>> >>>>
>> >>>>> Marie Rognes wrote:
>> >>>>>
>> >>>>>
>> >>>>>> Garth N. Wells wrote:
>> >>>>>>
>> >>>>>>
>> >>>>>>> Marie Rognes wrote:
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>> I'm trying to compile dolfin with PETSc and SLEPc, but without MPI:
>> >>>>>>>>
>> >>>>>>>> ./scons.local enableMpi=no withPetscDir=$PETSC_DIR
>> >>>>>>>> withSlepcDir=$SLEPC_DIR
>> >>>>>>>>
>> >>>>>>>> This gives the following error:
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>> Hopefully this is fixed now, although my PETSc is built with MPI, so I
>> >>>>>>> can't be sure. Let me know if it's ok or otherwise.
>> >>>>>>>
>> >>>>>>>
>> >>>>>> I get through the compilation stage now, so that's good :)
>> >>>>>>
>> >>>>>> However, if I try to "import dolfin", I get:
>> >>>>>>
>> >>>>>> Python 2.5.2 (r252:60911, Jun 19 2008, 15:12:17)
>> >>>>>> [GCC 4.1.2 (Gentoo 4.1.2 p1.0.2)] on linux2
>> >>>>>> Type "help", "copyright", "credits" or "license" for more information.
>> >>>>>> >>> import dolfin
>> >>>>>> Traceback (most recent call last):
>> >>>>>> File "<stdin>", line 1, in <module>
>> >>>>>> File
>> >>>>>>
>> >>>>>> "/home/meg/src/dolfin/dolfin/local/lib/python2.5/site-packages/dolfin/__init__.py",
>> >>>>>>
>> >>>>>> line 13, in <module>
>> >>>>>> from assemble import *
>> >>>>>> File
>> >>>>>>
>> >>>>>> "/home/meg/src/dolfin/dolfin/local/lib/python2.5/site-packages/dolfin/assemble.py",
>> >>>>>>
>> >>>>>> line 22, in <module>
>> >>>>>> from dolfin import *
>> >>>>>> File
>> >>>>>>
>> >>>>>> "/home/meg/src/dolfin/dolfin/local/lib/python2.5/site-packages/dolfin/dolfin.py",
>> >>>>>>
>> >>>>>> line 7, in <module>
>> >>>>>> import _dolfin
>> >>>>>> ImportError: /home/meg/src/dolfin/dolfin/local/lib/libdolfin.so:
>> >>>>>> undefined symbol: MPIUNI_TMP
>> >>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>> Looks like a linking problem to PETSc. Can you compile C++ DOLFIN programs?
>> >>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>> Nope. The cpp poisson demo gives:
>> >>>
>> >>> meg in cpp >> scons
>> >>> scons: Reading SConscript files ...
>> >>> scons: done reading SConscript files.
>> >>> scons: Building targets ...
>> >>> c++ -o main.o -c -Wall -pipe -ansi -g -Werror -O2 -fno-strict-aliasing
>> >>> -pthread -DDEBUG -DNDEBUG -DPACKAGE_VERSION="0.8.0" -DHAS_PETSC=1
>> >>> -DHAS_SLEPC=1 -DHAS_UMFPACK=1 -DHAS_GTS=1
>> >>> -I/home/meg/src/dolfin/dolfin/local/include
>> >>> -I/usr/lib/python2.5/site-packages/numpy/core/include
>> >>> -I/home/meg/src/slepc -I/home/meg/src/slepc/include
>> >>> -I/usr/include/python2.5 -I/home/meg/src/petsc/bmake/linux-gnu-c-debug
>> >>> -I/home/meg/src/petsc/include
>> >>> -I/home/meg/src/petsc-2.3.3-p13/include/mpiuni -I/usr/include/libxml2
>> >>> -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include main.cpp
>> >>> c++ -o demo -Wl,-rpath,/home/meg/src/slepc/lib/linux-gnu-c-debug
>> >>> -Wl,-rpath,/home/meg/src/petsc/lib/linux-gnu-c-debug -pthread
>> >>> -Wl,--export-dynamic main.o -L/home/meg/src/dolfin/dolfin/local/lib
>> >>> -L/home/meg/src/slepc/lib/linux-gnu-c-debug -L/usr/lib/atlas
>> >>> -L/home/meg/src/petsc/lib/linux-gnu-c-debug -ldolfin -lslepc -lblas
>> >>> -lumfpack -lamd -lgts -lxml2 -lpetscts -lpetscsnes -lpetscksp -lpetscdm
>> >>> -lpetscmat -lpetscvec -lpetsc -lgthread-2.0 -lrt -lgmodule-2.0 -ldl
>> >>> -lglib-2.0
>> >>> /home/meg/src/dolfin/dolfin/local/lib/libdolfin.so: undefined reference
>> >>> to `Petsc_MPI_Abort'
>> >>>
>> >>>
>> >>>> Almost certainly it is an incomplete link line when libdolfin.so is
>> >>>> constructed. When PETSc
>> >>>> is built without MPI, it creates an extra library (libmpiuni) which
>> >>>> must be linked against to
>> >>>> get these symbols.
>> >>>>
>> >>>>
>> >>> I'm not quite sure what that implies... But, I should somehow add
>> >>> -lmpiuni when linking dolfin? For instance in the pkgconfig file scons
>> >>> creates for petsc?
>> >>>
>> >>
>> >> What does the it look like when you build a PETSc demo? What should be
>> >> on the `Libs:' line of petsc.pc is the result of the following:
>> >>
>> >> echo -e 'include ${PETSC_DIR}/bmake/common/base\nlink:\n\t-@echo ${PETSC_LIB}' | make PETSC_DIR=~/usr/petsc-2* PETSC_ARCH=ompic-opt -f - link
>> >>
>> >> It will probably be ugly and often has lots of repetition for no
>> >> apparent reason. However, it should be reliable.
>> >>
>> >
>> >
>> > Hurray! My DOLFIN is back among the living. (Now, I just need to get it
>> > to understand that SLEPc is hanging around as well.)
>> >
>> > Just adding -lmpiuni to petsc.pc did not help. Adding the output of
>> >
>> > echo -e 'include ${PETSC_DIR}/bmake/common/base\nlink:\n\t-@echo
>> > ${PETSC_LIB}' | make -f - link
>> >
>> > did. Thanks a lot!
>> >
>> > However, there should probably be a prettier way of doing this?
>>
>> Yes, of course. The prettier way is to actually use the information we give
>>
>> 1) at the end of configure
>>
>> 2) in the configure.log
>>
>> 3) in RDict.db (Python pickle)
>>
>> 4) in the makefile (make getincludedirs, make getlinklibs)
>>
>> 5) in the conf files (petscvariables, petsconf.h)
>>
>> instead of ignoring it and hardcoding something into scons.
>>
>> Matt
>
> We don't. We get the include and link flags from the PETSc Makefiles.
> I've attached the pkgconfig generator for PETSc. Take a look at it.
Okay, I looked and this piece of code should produce the correct MPIUNI
flags (I checked that it does on my machine). It is a little unsafe since it
ignores all the other potential dependecies by using PETSC_LIB_BASIC.
These do not just include external packages, but sometimes libraries to
make the compilers work. I am guessing you used that in order to install
two different copies of UMFPACK.
Matt
> --
> Anders
>
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
>
> iD8DBQFIrFX0TuwUCDsYZdERAte+AJ4jdWwiQlWUdpo9NuKN0DX9tqZ5oQCfc/nK
> wLaEou+4ytbYVMz0WFFjZc0=
> =N69V
> -----END PGP SIGNATURE-----
--
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which
their experiments lead.
-- Norbert Wiener
Follow ups
References