problem with using shared library of GMP 5.0.1
Torbjorn Granlund
tg at gmplib.org
Fri Sep 3 08:53:26 CEST 2010
Paul Zimmermann <Paul.Zimmermann at loria.fr> writes:
I'm not sure this is a GMP bug, but I report it since other users might have
hit this problem. When compiling GMP 5.0.1 on a Core 2 with the default
configure, then installing it and using it with say MPFR 3.0.0, I get when
building MPFR:
/usr/bin/ld: /tmp/lib/libgmp.a(realloc.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/tmp/lib/libgmp.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[1]: *** [libmpfr.la] Error 1
If I recompile GMP 5.0.1 with adding -fPIC in CFLAGS, and reinstall it, then
everything works fine.
This problem does not occur with GMP 4.3.2.
If you are building a MPFR shared library, you need to use -fPIC (or
-fpic) with GCC when compiling MPFR. GMP uses -fPIC, as you can see
from a GMP build log. You also need to link to GMP's shared library,
not the static library.
If you add -fPIC to CFLAGS when compiling GMP, you will compile also the
static library with PIC code, which is harmless except that it will slow
things down. (The shared library will then be compiled with -fPIC
-fPIC.)
--
Torbjörn
More information about the gmp-bugs
mailing list