Compiling a static version of GMP for `-Wl,--whole-archive`

Cade Brown brown.cade at
Thu Jul 2 02:51:59 UTC 2020

Hello all,

I am trying to compile a static version of GMP (i.e. libgmp.a) on Linux
(Ubuntu) which I can embed fully in a .so I am compiling. I should be able
to do this as long as GMP contains PIC.

If I configure with `$ ./configure --enable-static --disable-shared
--with-pic --prefix=deps/prefix`

(and then make && make install)

I later compile my library with:

$ gcc -shared -O3 -std=c99 $(MY_OBJ) \
    -Wl,--whole-archive deps/prefix/lib/libgmp.a -Wl,--no-whole-archive \

Obviously, some steps are simplified for brevity, but I get the error:

usr/bin/ld: deps/prefix/lib/libgmp.a(dive_1.o): relocation R_X86_64_PC32
against symbol `__gmp_binvert_limb_table' can not be used when making a
shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value

Any help, or experiences others have had embedding GMP into a shared

Cade Brown
Working on MAGMA <>

More information about the gmp-discuss mailing list