I'm using openmpi, I'll try to compile PETSc and openmpi with shared libraries.
Thank you so much! ________________________________________ From: petsc-users-bounces at mcs.anl.gov [petsc-users-bounces at mcs.anl.gov] on behalf of Satish Balay [[email protected]] Sent: Saturday, March 10, 2012 12:57 PM To: PETSc users list Subject: Re: [petsc-users] Creating a dll on 64-bit environment Everything that goes into .so file should be built with -fPIC. So you have to make sure MPI/PETSc are built with -fPIC flag. One way to do this is to build woth PETSc and MPI as shared libraries. Not sure what MPI you are using - but wrt PETSc - use the configure option --with-shared-libraries=1 Satish On Sat, 10 Mar 2012, Markus Iivonen wrote: > Hello, > > I've written a program on 32-bit environment and I want to use a dll. > Everything worked fine until I uploaded the code on the other machine which > run 64-bit os. > At first I got an error: > > "/usr/bin/ld: MyClass.o: relocation R_X86_64_32S against `.rodata' can not be > used when making a shared object; recompile with -fPIC > MyClass.o: could not read symbols: Bad value" > > what was new for me because I haven't worked on 64bit environment before. > Anyway at first I just tried to modify "-${CLINKER} -shared > -Wl,-soname,${SONAME} -o ${VERS} *.o ${PETSC_MAT_LIB}" as "-${CLINKER} > -shared -fPIC -Wl,-soname,${SONAME} -o ${VERS} *.o ${PETSC_MAT_LIB}" > > even after that I got the same error, after that I added -fPIC to CFLAGS and > the error changed: > > "../petsc/petsc-3.2-p6/arch-linux2-cxx-debug/lib/libpetsc.a(err.o): > relocation R_X86_64_32 against `ompi_mpi_comm_self' can not be used when > making a shared object; recompile with -fPIC" > > So here is my current makefile > > > CFLAGS = - fPIC > CCPPFLAGS = > LOCDIR = /home/user/petsc/project/ > EXAMPLESC = x1.cpp x2.cpp x3.cpp > PETSC_DIR = /home/user/petsc/petsc-3.2-p6/ > > MYLIB = -L/home/user/petsc/project/opt/lib/ -libmyclass > LIBADD = /.../user/petsc/project/opt/lib/ > > VERS = libmyclass.so.1.0 > SONAME = libmyclass.so.1 > SOWOV = libmyclass.so > > include ${PETSC_DIR}/conf/variables > include ${PETSC_DIR}/conf/rules > > > > > MyProgram: main.o chkopts > -${CLINKER} -o $@ $< ${MYLIB} ${PETSC_MAT_LIB} > ${RM} main.o > > export LD_LIBRARY_PATH=${LIBADD}:$LD_LIBRARY_PATH > > LibMyProgram.so: MyClass.o chkopts > -${CLINKER} -shared -Wl,-soname,${SONAME} -o ${VERS} *.o > ${PETSC_MAT_LIB} > > mv ${VERS} ${LIBADD} > ln -sf ${LIBADD}${VERS} ${LIBADD}${SOWOV} > ln -sf ${LIBADD}${VERS} ${LIBADD}${SONAME} > > So would there be any kind of solution to this problem ? > > Thank You. > > Sincerely Markus Iivonen
