Jerry James wrote:
Since they contain
identical
symbols, the bundled polylmake version renames all of the symbols in
the GMP-enabled version to have "_gmp" suffixes. We did likewise, but
to support applications that only want the GMP-enabled version and
expect the original unaltered symbol names, we made declarations of
the form "foo __attribute__((alias(foo_gmp)))" for each external
symbol foo.
[snip]
And this in the .dynsym section:
109: 0000000000246100 0 OBJECT GLOBAL DEFAULT 23 dd_purezero
634: 0000000000246100 32 OBJECT GLOBAL DEFAULT 23 dd_purezero_gmp
So dd_purezero is not, in fact, an undefined symbol. It is an alias
to dd_purezero_gmp, which is defined and has the proper relocation
type.
Don't use __attribute__((alias(foo_gmp))), use asm("foo_gmp"), as per:
https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Asm-Labels.html
Kevin Kofler